调用百度AI新闻摘要API

 

1 知识点from urllib.parse import urlencode


access_token = "YOUR_TOKEN"
url = f"https://aip.baidubce.com/rpc/2.0/nlp/v1/news_summary"

url_param = {
    "charset": "UTF-8",
    "access_token": access_token
}

url = f"{url}?{urlencode(url_param)}"

知识点1 f"" 代表字符串中的{}可以替换


2 错误码信息
https://ai.baidu.com/ai-doc/NLP/Bk6z52e59

3 代码

百度工程师答疑
这部分token都是相同的

我们一般是都在URL中发送

因为有部分API使用的是application/json

部分是application/x-www-form-urlencoded

将token放在url中,方便代码抽象

 

  调用api使用的方式为

对应application/x-www-form-urlencoded,是form表单提交
application/json 另外一种是url只是url,数据全部转为json

本质:token写在哪里是与api的开发者规定相关的,可以在url中?xxx&charset=UTF-8,也可以写在body中。

4 新闻摘要的模型返回结果

  大部分还是以 新闻中的语句摘抄为主,个别会有一些修改

  主要展示场景为 新闻推送或新闻语音播报

  若需要对新闻或文章做深层的含义分析,可以使用“词向量表示”相关产品, 做定制化服务。

 

5 完整代码

#!usr/bin/env python
#-*- coding:utf-8 -*-


import requests
import json

import time


def getToken(client_id, client_secret):
    params = {
        'grant_type': 'client_credentials',
        'client_id': client_id,
        'client_secret': client_secret,
        }
    response = requests.get(
        'https://aip.baidubce.com/oauth/2.0/token', params=params)
    jsonres = json.loads(response.content)
    return jsonres.get('access_token')


url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/news_summary'

headers = {
    'Content-Type': 'application/json',
}


print("token===",getToken('M003nYhuyX4F9cgsTtooApCY', 'blAU8YfUjm4IEGBG8dXHNDQROhOqySou'))


def news_summary(title, content, max_summary_len):
    print('max_summary_len:', max_summary_len)
    url = "https://aip.baidubce.com/rpc/2.0/nlp/v1/news_summary?access_token=%s&charset=UTF-8" % getToken('M003nYhuyX4F9cgsTtooApCY', 'blAU8YfUjm4IEGBG8dXHNDQROhOqySou')

    params={}
    params['title'] = title
    # params['charset']='UTF-8'
    params['content'] = content
    params['max_summary_len'] = max_summary_len
    # params["access_token"]=getToken('M003nYhuyX4F9cgsTtooApCY', 'blAU8YfUjm4IEGBG8dXHNDQROhOqySou')

    params = json.dumps(params)
    begin = time.perf_counter()
    print("params=",params)
    response = requests.post(url, headers=headers, data=params)
    content = response.content.decode()
    end = time.perf_counter()
    print('处理时长:' + '%.2f' % (end - begin) + '')
    if content:
        data = json.loads(content)
        print("data=",data)
        summary = data['summary']
        print('Summary:', summary)
        return summary
title="星系团碰撞时可产生1亿摄氏度高温冲击波"
content="新浪科技讯 北京时间7月12日消息,据英国每日邮报报道,一支研究小组对两个星系团观测显示,当星系团碰撞时会产生合并冲击,将动能转化为热能,星系碰撞时可以产生高达1亿摄氏度的高温冲击波。星系团是由数百个星系组成,每个星系通过引力作用将数千亿颗恒星结合在一起。天文学家已经知道星系团之间会发生碰撞,此前已观察到星系初始碰撞的前后过程,然而,拍摄到每个星系团碰撞过程是非常困难的,可能需要花费人们一生的时间去完成。来自国际射电天文研究中心(ICRARA)的研究小组希望建立一个关于这些星团如何融合的连续模型,他们观察到两个星系团的碰撞初期阶段,与所有已观测到的合并冲击情况相反,最新观测的冲击沿着合并平面向外扩散。这一发现揭晓了大质量星系团形成的一个重要时期,当星系团快速接近时,会导致沿合并轴的气体产生较强压缩,根据当前理论模型预测称,大部分激波能量可能会消失在星系团之外,最终转化为热气体。在我们对宇宙结构形成的理解中,这一观察可被看作是一块缺失的“拼图”,这与星系和星系团等大型天体结构主要通过碰撞和合并而增长的观点相悖。星系团是已知最大的天体,是由数百个星系组成,每个星系都包含着数千亿颗恒星,周围环绕着一圈炽热气体,自从宇宙大爆炸以来,星系一直处于增长状态,主要是通过相互碰撞和合并。由于它们具有较大体积,直径可达到数百万光年,此类碰撞可能需要大约10亿年时间才能完成。当宇宙尘埃落定时,两个相互碰撞的星系团将合并成为一个更大的星系团。"

# 摘要取原文的30%
# news_summary(title,content,int(len(content) * 0.50))
# 对文本的二次压缩
content=news_summary(title,content,int(len(content) * 0.50))
news_summary(title,content,int(len(content) * 0.50))

 

6 完成一次百度api调用的完整过程

1)创建任务

2)任务中有 appkey secret等,为了获取token,获取token的函数可以复用

3)api的使用方法(需要携带参数)

  

 

 技术文档中包含nlp和智能创作等api的说明

 

posted on 2020-10-10 05:33  lexn  阅读(1772)  评论(0编辑  收藏  举报

导航