基于ArkUI eTS开发的坚果新闻(NutNews)

举报
坚果的博客 发表于 2022/07/29 08:07:13 2022/07/29
【摘要】 头条、新闻、财经、体育、娱乐、军事、教育、科技、NBA、股票、星座、女性、健康、育儿等频道热门新闻。实现的功能:获取接口数据新闻列表新闻详情页你能学到的有:网络请求可滚动组件容器组件路由跳转基础组件文件结构.├── config.json├── ets│ └── MainAbility│ ├── app.ets│ ├── data│ │ └── g...


头条、新闻、财经、体育、娱乐、军事、教育、科技、NBA、股票、星座、女性、健康、育儿等频道热门新闻。

实现的功能:

  • 获取接口数据

  • 新闻列表

  • 新闻详情页

你能学到的有:

  • 网络请求

  • 可滚动组件

  • 容器组件

  • 路由跳转

  • 基础组件



文件结构


.
├── config.json
├── ets
│   └── MainAbility
│       ├── app.ets
│       ├── data
│       │   └── get_test.ets
│       ├── model
│       │   ├── newsDetailModel.ets
│       │   └── newsModel.ets
│       └── pages
│           ├── Main.ets
│           ├── index.ets
│           └── newsDetails.ets
└── resources
    ├── base
    │   ├── element
    │   │   ├── color.json
    │   │   └── string.json
    │   └── media
    │       └── icon.png
    └── rawfile

效果预览:

gif13



获取新闻接口a

标识:get



Url:https://way.jd.com/jisuapi/get?channel=头条&num=40&start=0&appkey=7c913be32b690701cd994d804a6d4294



image-20220722220048504


image-20220722220459968


请求参数说明:


名称 必填 类型 说明
sort string 类型,desc:指定时间之前发布的,asc:指定时间之后发布的
page int 当前页数,默认1,最大20
pagesize int 每次返回条数,默认1,最大20
time string 时间戳(10位),如:1418816972
key string 在个人中心->我的数据,接口名称上方查看

返回参数说明:


名称 类型 说明
error_code int 返回码
reason string


JSON返回示例

Status Code: 200
Time:112ms
Date:Fri 22 Jul 2022 13:56:05 GMT
Body:
{
    "code": "10000",
    "charge": false,
    "msg": "查询成功",
    "result": {
        "status": 0,
        "msg": "ok",
        "result": {
            "channel": "头条",
            "num": 2,
            "list": [
               
                {
                    "title": "瓦拉内:不后悔来曼联   有关C罗争论都是球队外的",
                    "time": "2022-07-22",
                    "src": "新浪体育讯",
                    "category": "sports",
                    "pic": "https://n.sinaimg.cn/sports/transform/268/w650h418/20220722/4a1a-d44ad51b12a38723a8902321e215b143.jpg",
                    "url": "https://sports.sina.cn/premierleague/manutd/2022-07-22/detail-imizirav4952816.d.html?vt=4&pos=108",
                    "weburl": "https://sports.sina.com.cn/g/pl/2022-07-22/doc-imizirav4952816.shtml",
                    "content": "<p class=\"art_p\">近日,曼联后卫瓦内拉接受没拆封时,发表了自己的一些看法。</p>\n<p class=\"art_p\">首先是对于是否后悔来到曼联的问题,他直言自己绝对没有做错:“在足球界你要挑战自己,不断提高。在老地方停留了10年后我想要提升自己。我认为英超绝对精彩,曼联也是一家很伟大的俱乐部,我从来没有觉得我的决定是错误的。”</p>\n<p class=\"art_p\">面对新赛季后卫位置上的竞争,瓦拉内表示这对球队有好处:“竞争对于球队来说是有好处的,马奎尔是队长,他很优秀。每一家俱乐部都是一样,如果球员都想着为球队发挥,那么一定是好事。”</p>\n<div sax-type=\"proxy\" class=\"j_native_uvw220722 box\" style=\"margin:20px 0\"></div><p class=\"art_p\">面对新赛季,瓦拉内认为他们有一个好的开始,并且新主帅滕哈赫的到来让球队更加富有能量,变的攻击性更强,球队能提出真正享受的足球。</p>\n<p class=\"art_p\">最后,瓦拉内也对C罗的事件发表了自己的看法:“对于他的争论都是在更衣室外面发生的。我们都知道他是一名传奇球员,他总能帮助球队。和他一起踢球很棒,我们知道他的能力,知道他名气很大,因此很多人都会谈论他的表现和球队的表现。”</p>\n<p class=\"art_p\">(塞尔吉奥)</p>"
                }
            ]
        }
    },
    "requestId": "d405d8a616eb42c4ba16b873540f8d53"


接下来,我们开始今天的实战,首先创建一个项目NutJoke

image-20220722080412586


点击下一步

image-20220722221437036

因为我们要网络请求

所以我们需要在config.json中配置网络请求权限

网络请求的步骤

1、声明网络请求权限

entry下的config.jsonmodule字段下配置权限

"reqPermissions": [
   {
      "name": "ohos.permission.INTERNET"
   }
]

2、支持http明文请求

默认支持https,如果要支持http,在entry下的config.jsondeviceConfig字段下配置

  "deviceConfig": {"default": {
    "network": {
      "cleartextTraffic": true
    }
  }},

3、创建HttpRequest

// 导入模块
import http from '@ohos.net.http';
// 创建HttpRequest对象
let httpRequest = http.createHttp();

4、发起请求

GET请求(默认为GET请求

  // 请求方式:GET
  getRequest() {
    // 每一个httpRequest对应一个http请求任务,不可复用
    let httpRequest = http.createHttp()
    let url = 'https://way.jd.com/jisuapi/get?channel=头条&num=20&start=0&appkey=7c913be32b690701cd994d804a6d4294'
    httpRequest.request(url, (err, data) => {
      if (!err) {

        var newsModel: NewsModel = JSON.parse(data.result.toString())

        this.future = newsModel.result.result.list

        console.info('=====data.result' + newsModel.result.result.list)
      } else {
        // 请求失败,弹出提示
        prompt.showToast({ message: err.message })
      }
    })
  }


5、解析数据(简单示例)

1.网络请求到的json字符串

/*
 * Copyright (c) 2021 JianGuo Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

export function getTest() {
  return [
   
    {
      "title": "瓦拉内:不后悔来曼联   有关C罗争论都是球队外的",
      "time": "2022-07-22",
      "src": "新浪体育讯",
      "category": "sports",
      "pic": "https://n.sinaimg.cn/sports/transform/268/w650h418/20220722/4a1a-d44ad51b12a38723a8902321e215b143.jpg",
      "url": "https://sports.sina.cn/premierleague/manutd/2022-07-22/detail-imizirav4952816.d.html?vt=4&pos=108",
      "weburl": "https://sports.sina.com.cn/g/pl/2022-07-22/doc-imizirav4952816.shtml",
      "content": "<p class=\"art_p\">近日,曼联后卫瓦内拉接受没拆封时,发表了自己的一些看法。</p>\n<p class=\"art_p\">首先是对于是否后悔来到曼联的问题,他直言自己绝对没有做错:“在足球界你要挑战自己,不断提高。在老地方停留了10年后我想要提升自己。我认为英超绝对精彩,曼联也是一家很伟大的俱乐部,我从来没有觉得我的决定是错误的。”</p>\n<p class=\"art_p\">面对新赛季后卫位置上的竞争,瓦拉内表示这对球队有好处:“竞争对于球队来说是有好处的,马奎尔是队长,他很优秀。每一家俱乐部都是一样,如果球员都想着为球队发挥,那么一定是好事。”</p>\n<div sax-type=\"proxy\" class=\"j_native_uvw220722 box\" style=\"margin:20px 0\"></div><p class=\"art_p\">面对新赛季,瓦拉内认为他们有一个好的开始,并且新主帅滕哈赫的到来让球队更加富有能量,变的攻击性更强,球队能提出真正享受的足球。</p>\n<p class=\"art_p\">最后,瓦拉内也对C罗的事件发表了自己的看法:“对于他的争论都是在更衣室外面发生的。我们都知道他是一名传奇球员,他总能帮助球队。和他一起踢球很棒,我们知道他的能力,知道他名气很大,因此很多人都会谈论他的表现和球队的表现。”</p>\n<p class=\"art_p\">(塞尔吉奥)</p>"
    }
  ]
}

2.创建相应的对象

/*
 * Copyright (c) 2021 JianGuo Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import { NewsDetailData } from './newsDetailModel';
export class NewsModel {
  charge: string //返回说明
  code: number //返回码,1000为查询成功
  msg: string //
  result: {
    result: NewsModel7 // 笑话
    status: number //数量
    msg: string // ok
  }
}
export class NewsModel7 {
  channel: string //频道
  list: Array<NewsDetailData> // 笑话
}


/*
 * Copyright (c) 2021 JianGuo Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


export class NewsDetailData {
  title: string // 标题
  time: string // 时间
  src: string //来源
  category: string //分类
  pic: string // 图片
  content: string //
  url: string //原文手机网址
  weburl: string //原文PC网址



}


参考文档

https://wx.jdcloud.com/market/datas/31/11073

7c913be32b690701cd994d804a6d4294


项目地址

https://gitee.com/jianguo888/nut-news

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。