调用聚合数据API获取新闻头条

news2024/12/24 22:05:41

调用聚合数据API获取新闻头条

  • 1.作者介绍
  • 2.API和聚合数据API的介绍
    • 2.1 API简介
    • 2.2 聚合数据API
  • 3.实验过程介绍,完整实验代码,测试结果
    • 3.1参数说明
    • 3.2获取代码
    • 3.3代码实现
    • 3.4问题与分析

1.作者介绍

姚嘉欣,男,西安工程大学电子信息学院,2022级研究生
研究方向:机器视觉与人工智能
电子邮件:2390410432@qq.com

张思怡,女,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:981664791@qq.com

2.API和聚合数据API的介绍

2.1 API简介

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
API就是接口,就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数

2.2 聚合数据API

第一步,创建账号
在这里插入图片描述
第二步,进入个人中心
在这里插入图片描述
第三步,从数据中心进入我的API
在这里插入图片描述
第四步,申请新数据
在这里插入图片描述

第五步,搜索新闻头条
第六步,申请使用新闻头条
在这里插入图片描述
第七步,获取自己的key
在这里插入图片描述

3.实验过程介绍,完整实验代码,测试结果

3.1参数说明

在这里插入图片描述
在这里插入图片描述

3.2获取代码

在这里插入图片描述

3.3代码实现

#导入 urllib.parse、urllib.request 和 json 模块,这些模块分别提供了 URL 解析、HTTP 请求和 JSON 解析的功能。
import urllib.parse, urllib.request, json
#定义了一个变量 url,表示要访问的 API 接口的 URL 地址
url = 'http://v.juhe.cn/toutiao/index'
#定义了一个字典类型的变量 params,包含了请求参数 type 和 key,type 表示要获取的新闻类型,key 是需要申请的接口API接口请求Key。
params = {
    "type": "keji",  # 头条类型,top(头条,默认),shehui(社会),guonei(国内),guoji(国际),yule(娱乐),tiyu(体育)junshi(军事),keji(科技),caijing(财经),shishang(时尚)
    "key": "363865e58548a13a7ba2a9740f581d8e", # 您申请的接口API接口请求Key
    "page": "5", #当前页数, 默认1, 最大50
    "page_size": "5", #每页返回条数, 默认30 , 最大30
    "is_filter": "0", #	是否只返回有内容详情的新闻, 1:是, 默认0
}
#使用 urlencode 方法将请求参数编码为 URL 查询字符串,并使用 encode 方法将其编码为 bytes。
querys = urllib.parse.urlencode(params).encode('utf-8')
#创建一个 urllib.request.Request 对象,其中 data 属性设置为编码后的查询字符串。这样就创建了一个 POST 请求,请求的内容就是查询字符串。
request = urllib.request.Request(url, data=querys)
#发送请求并读取响应,response 变量保存了响应对象,read 方法读取出响应的内容并赋值给 content 变量。
response = urllib.request.urlopen(request)
content = response.read()
#判断 content 是否为空,如果不为空则尝试将其解析为 JSON 格式。如果解析成功,则从结果中获取 error_code 字段,如果值为 0,则说明请求成功,解析出其中的新闻标题、时间和链接信息并输出;否则输出请求失败的原因。
if (content):
    try:
        result = json.loads(content.decode('utf-8'))
        error_code = result['error_code']
        if (error_code == 0):
            data = result['result']['data']
            for i in data:
                # 更多字段可参考接口文档
                print("新闻标题:%s\n新闻时间:%s\n新闻链接:%s\n\n" % (i['title'], i['date'], i['url']))
        else:
            print("请求失败:%s %s" % (result['error_code'], result['reason']))
    except Exception as e:
        print("解析结果异常:%s" % e)
else:
    # 可能网络异常等问题,无法获取返回内容,请求异常
    print("请求异常")
#如果解析过程中发生异常,则输出异常信息。
#如果 content 为空,则说明请求过程中出现了异常,输出请求异常。

3.4问题与分析

问题一
原始代码是使用Python 2.x的urllib和urllib2库来访问一个头条新闻API,并打印出返回的结果。在Python 3.x中,这些库已经被合并为一个名为"urllib.request"的库,所以需要稍作修改才能在Python 3.x中运行
在这里插入图片描述
在这里插入图片描述
问题二
在这里插入图片描述
在Python 3.x中,也不需要再使用"reload"函数来设置默认编码了,因为所有字符串都默认使用Unicode编码。
在这里插入图片描述
在这里插入图片描述
问题三
在这里插入图片描述
在Python 3.x中,urllib.urlencode()已经被移除,取而代之的是urllib.parse.urlencode()函数。如果你的代码运行环境是Python 3.x版本,那么需要将代码中的urllib.urlencode()替换为urllib.parse.urlencode()。
问题四
代码查看的只有新闻的标题和时间,以及网页,只能通过点击网页去查看新闻的详细内容。修改代码,使其显示新闻详细内容。
在这里插入图片描述

import urllib.parse, urllib.request, json

#定义了一个变量 url,表示要访问的 API 接口的 URL 地址
url = 'http://v.juhe.cn/toutiao/index'

#定义了一个字典类型的变量 params,包含了请求参数 type 和 key,type 表示要获取的新闻类型,key 是需要申请的接口API接口请求Key。
params = {
    "type": "top",  # 头条类型,top(头条,默认),shehui(社会),guonei(国内),guoji(国际),yule(娱乐),tiyu(体育)junshi(军事),keji(科技),caijing(财经),shishang(时尚)
    "key": "363865e58548a13a7ba2a9740f581d8e", # 您申请的接口API接口请求Key
    "page": "1", #当前页数, 默认1, 最大50
    "page_size": "3", #每页返回条数, 默认30 , 最大30
    "is_filter": "0", # 是否只返回有内容详情的新闻, 1:是, 0:否,默认为0,返回所有新闻的详情信息。
}

#使用 urlencode 方法将请求参数编码为 URL 查询字符串,并使用 encode 方法将其编码为 bytes。
querys = urllib.parse.urlencode(params).encode('utf-8')

#创建一个 urllib.request.Request 对象,其中 data 属性设置为编码后的查询字符串。这样就创建了一个 POST 请求,请求的内容就是查询字符串。
request = urllib.request.Request(url, data=querys)

#发送请求并读取响应,response 变量保存了响应对象,read 方法读取出响应的内容并赋值给 content 变量。
response = urllib.request.urlopen(request)
content = response.read()

#判断 content 是否为空,如果不为空则尝试将其解析为 JSON 格式。
if (content):
    try:
        result = json.loads(content.decode('utf-8'))
        error_code = result['error_code']
        if (error_code == 0):
            data = result['result']['data']
            for i in data:
                # 更多字段可参考接口文档
                print("新闻标题:%s\n新闻时间:%s\n新闻链接:%s\n" % (i['title'], i['date'], i['url']))
                # 发送请求获取新闻详情
                detail_url = i['url']
                detail_response = urllib.request.urlopen(detail_url)
                detail_content = detail_response.read().decode('utf-8')
                # 解析新闻详情页面,获取新闻正文
                start_index = detail_content.find('<div class="article"><p>') + len('<div class="article"><p>')
                end_index = detail_content.find('</p></div>', start_index)
                detail = detail_content[start_index:end_index]
                # 输出新闻详情
                print("新闻详情:%s\n" % detail)
        else:
            print("请求失败:%s %s" % (result['error_code'], result['reason']))
    except Exception as e:
        print("解析结果异常:%s" % e)
else:
    # 可能网络异常等问题,无法获取返回内容,请求异常
    print("请求异常")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】python进阶篇之模块化编程

模块与包 模块化编程 与java中的import功能类似&#xff0c;在python中&#xff0c;一个.py文件就是一个模块。 ⚠️&#xff1a;模块名称不要与python自有模块名称相同。 模块的导入 导入Python中自有的包 导入语法和前端的模块化开发语法很像 import math from math im…

学习Vue(4)

文章目录 路由简介基本使用模式设置注意点 组件一般组件路由组件 多级路由总结 路由传参参数传参query总结 params参数总结 命名路由总结 props对象写法设为trueprops为函数 按钮实现跳转和前进后退独有的生命钩子activated()deactivated() 路由守卫前置路由守卫后置路由守卫独…

基于OpenCV的人脸对齐步骤详解及源码实现

目录 1. 前言2. 人脸对齐基本原理与步骤3. 人脸对齐代码实现 1. 前言 在做人脸识别的时候&#xff0c;前期的数据处理过程通常会遇到一个问题&#xff0c;需要将各种人脸从不同尺寸的图像中截取出来&#xff0c;再进行人脸对齐操作&#xff1a;即将人脸截取出来并将倾斜的人脸…

JVM-java对象内存分布(二)

目录 一、栈针 二、java 对象内存分布 1、那何为java内存对象布局&#xff1f; 2、什么是jvm的内存模型 1、如果我们新生代&#xff0c;一直创建新对象&#xff0c;此时我们新生代不够用了怎么办&#xff1f; 2、那么为什么大部分对象的生命周期比较短呢&#xff1f;这个…

HCIP-7.3QinQ技术原理、配置链路聚合Eth-Trunk

HCIP-7.3QinQ技术原理、配置&链路聚合Eth-Trunk 1、QinQ概述1.1、QinQ实现方式&#xff1a;1.2、QinQ封装结构&#xff1a;1.3、QinQ的分类&#xff1a;1.3.1、基于端口的QinQ1.3.2、灵活QinQ 2、链路聚合Eth-Trunk2.1、Eth-Trunk基本原理2.2、手工聚合模式2.2.1、配置接口…

集团公司该如何构建信息化系统?

干货文章&#xff0c;全文手码&#xff0c;花3分钟认真看完&#xff0c;绝对有收获&#xff01; 前言&#xff1a; 信息化系统是管理体系的延伸&#xff0c;如果一家集团企业想要走向信息化&#xff0c;首先得考虑的是&#xff0c;企业内当前是否已经存在完备的信息化管理制度…

《面试1v1》SpringMVC

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

【电子取证篇】电子数据取证标准(国家标准GB/T)

【电子取证篇】电子数据取证标准&#xff08;国家标准GB/T&#xff09; ​ 电子数据取证国家标准&#xff0c;此次更新把名称由"电子物证"更改成了"电子数据"&#xff0c;避免了不同部门不同行业因为不同叫法而辩论个不停&#xff0c;后续标准的更新应该会…

JUC高级-0624

10. ThreadLocal&#xff08;线程局部变量&#xff09; 10.1 ThreadLocal基础 大厂面试题 ThreadLocal中 ThreadLocalMap的数据结构和关系&#xff1f;ThreadLocal的key是弱引用&#xff0c;这是为什么&#xff1f;ThreadLocal内存泄露问题你知道吗&#xff1f;ThreadLocal中…

clickhouse初探

背景 目前公司用的是influxdb来存储时序数据&#xff0c;但是influxdb太坑了&#xff0c;查一天的数据就开始内存猛涨&#xff0c;然后就炸了&#xff0c;查询语句也不适应。因此调研了tdengine&#xff0c;还把influxdb和tdengine做了性能对比。 结果嘛 &#xff0c;首先tden…

C语言:位操作----将某一位置1或置0

C语言 基础开发----目录 前期准备 想要将将某一位置1或置0&#xff0c;需要进行位操作。 此次需要用到 与(&)&#xff0c;或(|)&#xff0c;左移(<<)和右移(>>) 这四个位操作。 具体位操作说明&#xff1a;C语言&#xff1a;位运算符----与(&)&#xff…

5年资深Android开发,转行逆向开发该如何学习?

Android逆向是什么&#xff1f; 简单地来说&#xff0c;安卓逆向是对已经打包好的APP进行反编译、源码分析了解APP实现逻辑的一门技术。我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包&#xff0c;逆向就是要最大程序地还原出APK打包之前的源码。 逆向需要用到解密…

[Web程序设计]实验: Web基础

一、实验目的 &#xff08;1&#xff09;掌握开发工具的安装和配置 &#xff08;2&#xff09;熟悉程序的编写&#xff0c;运行和访问方法&#xff1b; 二、实验内容 &#xff08;1&#xff09;请编写出一个HTML页面&#xff0c;令其输出“hello world!~~”&#xff0c;使用…

略施小计,拥有自己的GPT

ChatGPT一经发布就在AI圈引起轰动&#xff0c;GPT-4和chagpt-plugin让OpenAI和其他同行拉开了更大的差距。由于某些原因&#xff0c;我们可能无法亲身体验ChatGPT的神奇之处。但现在&#xff0c;如果你还没有体验过ChatGPT&#xff0c;就像10年前没有购买比特币一样&#xff08…

SuperMap GIS基础产品WebGIS FAQ集锦(3)

SuperMap GIS基础产品WebGIS FAQ集锦&#xff08;3&#xff09; 【iClient】iClient for Leaflet,如何修改map的默认渲染方式&#xff1f; 【解决办法】map的默认渲染方式取决于浏览器支持&#xff0c;可通过renderer属性设置&#xff0c;设置为L.SVG或L.Canvas 【iClient】le…

k8s 学习九,pod 知识点 上

在 K8S 中&#xff0c; pod 是一个非常关键的存在&#xff0c;我们一起来看看 pod 具体是个什么&#xff1f; pod 是个啥&#xff1f; pod 是个什么呢&#xff1f;pod 是 K8S中的一个核心概念 每一个 pod 都会有一个特殊的根容器&#xff0c;叫做 pause 容器&#xff0c;paus…

云原生:深入掌握Docker日志管理:高效策略与最佳实践

前言 在docker的整个生命周期中&#xff0c;超过70%的时间&#xff0c;我们都是在用docker进行运维工作&#xff0c; 查看docker的日志&#xff0c;是运维中的必会技能。 docker日志分为&#xff1a; docker引擎日志应用日志 今天我们重点来讨论下docker的日志使用&#xf…

【博客672】prometheus使用数据外推与兼容跳变重置来优化处理窗口函数(rate,irate,increase)

prometheus使用数据外推与兼容跳变重置来优化处理窗口函数(rate&#xff0c;irate&#xff0c;increase) 场景 以下是用于计算计数器增长率的三个函数之间差异的高级概述&#xff1a; rate()&#xff1a;这计算每秒的增长率&#xff0c;在整个提供的时间窗口内平均。示例&am…

谷歌推出“能讲会听”的大语言模型AudioPaLM,实现语音理解和生成

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;顾梦佳 近日&#xff0c;谷歌推出了一个能够理解并生成语音理解的大型语言模型——AudioPaLM。这一模型融合了分别基于文本和语音两种语言模型——PaLM-2 和 AudioLM&#xff0c;形成了一个统一的多模态架构。该模型不仅能对…

@monthly /root/.cfg/./dealer病毒清除

登录服务器时&#xff0c;ssh提示密码不对&#xff0c;就去控制台检查&#xff0c;查看到虚拟平台中多台服务器提示虚拟机CPU使用告警&#xff0c;占用过高。远程无法登录。 原因分析&#xff1a;所有中毒的均为linux服务器&#xff0c;密码设置过于简单&#xff0c;防火墙关闭…