昨日抓了一大堆公司店铺的评论.可是抠门的天猫不予展示评分... 所以也不知道到底是好评呀,还是差评. 心好累...
本想着弄一个现成的snowNlp来进行情感分析. 因为没有自己的语料库,也不会自己去训练. 所以就想着弄个现成的 腾讯Ai开放平台. 简直太好用了!
期间有收到两位大佬: 大佬1 大佬2 文章的指点.
因为是第一次接入Api. 所以会写得很蠢. 主要是为了自己记录自己的思路.
本来自己想着... 就是为了懒,直接用现成的api. 可是... 用户的评论实在是太五花八门了...
所以你看这个蛮明显的差评... 被判断为 正面.(polar=1为正面,0为中性,-1为负面.)
唉...
1、 设计请求的参数.
在 文档中心 查阅到每一个需要请求的参数.
app_id,time_stamp,nonce_str,session都是现成的.没有问题.
question是拿来传参的. 也没问题. 主要就是sign的问题. 文档中心没有Python3的. 涉及到编码的问题,我不太了解. 只能套用大佬现成的.
2、发送请求
发送请求,要么是直接 通过拼接URL直接GET, 要么就是POST一个dict.
3、解析json
接下来就是根据需要,解析json就好啦~~
import hashlib
import time
import random
import string
from urllib.parse import quote
def curlmd5(src):
m = hashlib.md5(src.encode('UTF-8'))
# 将得到的MD5值所有字符转换成大写
return m.hexdigest().upper()
def get_params(plus_item):
global params
#请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效)
t = time.time()
time_stamp=str(int(t))
# 请求随机字符串,用于保证签名不可预测
nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))
# 应用标志,这里修改成自己的id和key
app_id='咩咩咩'
app_key='咩咩咩'
params = {'app_id':app_id,
'question':plus_item,
'time_stamp':time_stamp,
'nonce_str':nonce_str,
'session':'10000'
}
sign_before = ''
#要对key排序再拼接
for key in sorted(params):
# 键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8。quote默认大写。
sign_before += '{}={}&'.format(key,quote(params[key], safe=''))
# 将应用密钥以app_key为键名,拼接到字符串sign_before末尾
sign_before += 'app_key={}'.format(app_key)
# 对字符串sign_before进行MD5运算,得到接口请求签名
sign = curlmd5(sign_before)
params['sign'] = sign
return params
import requests
def get_content(plus_item):
global payload,r
# 聊天的API地址
url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat"
# 获取请求参数
plus_item = plus_item.encode('utf-8')
payload = get_params(plus_item)
# r = requests.get(url,params=payload)
r = requests.post(url,data=payload)
return r.json()["data"]["answer"]
import hashlib
import time
import random
import string
from urllib.parse import quote
def curlmd5(src):
m = hashlib.md5(src.encode('UTF-8'))
# 将得到的MD5值所有字符转换成大写
return m.hexdigest().upper()
def get_params(plus_item):
global params
#请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效)
t = time.time()
time_stamp=str(int(t))
# 请求随机字符串,用于保证签名不可预测
nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))
# 应用标志,这里修改成自己的id和key
app_id='咩咩咩'
app_key='咩咩咩'
params = {'app_id':app_id,
'text':plus_item,
'time_stamp':time_stamp,
'nonce_str':nonce_str,
}
sign_before = ''
#要对key排序再拼接
for key in sorted(params):
# 键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8。quote默认大写。
sign_before += '{}={}&'.format(key,quote(params[key], safe=''))
# 将应用密钥以app_key为键名,拼接到字符串sign_before末尾
sign_before += 'app_key={}'.format(app_key)
# 对字符串sign_before进行MD5运算,得到接口请求签名
sign = curlmd5(sign_before)
params['sign'] = sign
return params
def get_sentiments(comments):
url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textpolar"
comments = comments.encode('utf-8')
payload = get_params(comments)
r = requests.post(url,data=payload)
return r.json()