获取qq昵称接口_使用Python获取QQ昵称以及头像链接并写成API接口

本文介绍如何利用Python的Flask框架创建一个API接口,该接口能获取QQ昵称和头像链接。通过调用QQ提供的接口并解析返回结果,作者详细展示了代码实现过程,包括异常处理和参数验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dc5d2209cf30121f901d2e13cd69c4f1.gif

Hi! 

Long time no see,guys!

公众号已经由原来的计算机天堂改名为码农小猪,今后公众号内会写一些我自己的编程经验,与大家共同学习,共同进步!

最近在写一个自己的API,准备把一些小功能结合起来,成为一个小工具,API网站等基本功能写完后会分享出来

回到正题,有天我在 surf the internet 时,发现了QQ的一个接口,GET请求就会返回QQ的信息,但是并不是json格式的数据不能直接引用,所以就产生了写一个API接口的想法,下面开工

接口如下

https://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?g_tk=1518561325&uins=后面跟QQ号

返回的结果是(这里用我马哥QQ10001做为示范)

portraitCallBack({"10001":["http://qlogo2.store.qq.com/qzone/10001/10001/100",25349,-1,9,0,1,"pony",0]})

这里用的是Python的一个轻量级的WEB框架:Flask,百度大把说明,就不做介绍了

先写出整体框架

# -*- coding: utf-8 -*-import requests,refrom flask import Flask,requestfrom flask_restful import Api, Resourceapp = Flask(__name__)api = Api(app)app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))#作用是返回数据时不对中文进行ascii编码class QQApi(Resource):#定义一个QQApi类    def __init__(self):        self.url = 'https://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?g_tk=1518561325&uins={}'    def get(self):#绑定 HTTP GET METHOD        pass# 设置路由api.add_resource(QQApi, '/qqapi')if __name__ == '__main__':    app.run(debug=False)

在上面的get方法里首先用requests库get请求url,用正则表达式提取出我们需要的,比如昵称和头像链接

  res = requests.get(self.url.format(qq)).content.decode('gb2312')#self.url就是上面那个链接  res = re.findall('portraitCallBack(.*)',res)[0]  imgurl = re.findall('":."(.*?)",',res)#头像链接  name = re.findall(',"(.*?)",0.}.',res)#昵称

然后判断提取的信息是否为空,然后返回不同信息,如下:

if imgurl and name:    imgurl = imgurl[0]    name = name[0]    data = {        'code':'200',        'imgurl':imgurl,        'name':name        }    return dataelse:    return {'code':'103','msg':'获取信息失败'}

就此,API基本完成了,但是在实际运行中,如果QQ小于5位ui、大于十位或者不为数字会出现各种各样的错误,所以必须对传递过来的QQ参数首先加以判断:

qq = request.args.get('qq')if qq == ''#判断是否为空    return {'code': '101', 'msg': 'QQ不可为空'}elif len(qq)<5 or len(qq)>10:#判断QQ位数    return {'code': '104', 'msg': 'QQ错误'}elif not qq.isdigit():#判断是否为数字    return {'code': '105', 'msg': 'QQ只能为数字'}

最后再统一加个异常处理,防止其他情况出现

def get(self):#绑定 HTTP GET METHOD    try:        qq = request.args.get('qq')        if qq == '':            vreturn {'code': '101', 'msg': 'QQ不可为空'}        elif len(qq)<5 or len(qq)>10:            return {'code': '104', 'msg': 'QQ错误'}        elif not qq.isdigit():             return {'code': '105', 'msg': 'QQ只能为数字'}        res = requests.get(self.url.format(qq)).content.decode('gb2312')        res = re.findall('portraitCallBack(.*)',res)[0]        imgurl = re.findall('":."(.*?)",',res)        name = re.findall(',"(.*?)",0.}.',res)        if imgurl and name:            imgurl = imgurl[0]            name = name[0]            data = {                'code':'200',                'imgurl':imgurl,                'name':name                }            return data        else:              return {'code':'103','msg':'获取信息失败'}    except Exception as e:        return {'code':'102','msg':e}

最终代码为

# -*- coding: utf-8 -*-import requests,refrom flask import Flask,requestfrom flask_restful import Api, Resourceapp = Flask(__name__)#Flask类只有一个必须指定的参数,即程序主模块或者包的名字,__name__是系统变量,该变量指的是本py文件的文件名api = Api(app)app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))#作用是返回数据时不对中文进行ascii编码class QQApi(Resource):#定义一个QQApi类    def __init__(self):        self.url = 'https://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?g_tk=1518561325&uins={}'    def get(self):#绑定 HTTP GET METHOD        try:            qq = request.args.get('qq')            if qq == '':                vreturn {'code': '101', 'msg': 'QQ不可为空'}            elif len(qq)<5 or len(qq)>10:                return {'code': '104', 'msg': 'QQ错误'}            elif not qq.isdigit():                 return {'code': '105', 'msg': 'QQ只能为数字'}            res = requests.get(self.url.format(qq)).content.decode('gb2312')            res = re.findall('portraitCallBack(.*)',res)[0]            imgurl = re.findall('":."(.*?)",',res)            name = re.findall(',"(.*?)",0.}.',res)            if imgurl and name:                imgurl = imgurl[0]                name = name[0]                data = {                    'code':'200',                    'imgurl':imgurl,                    'name':name                    }                return data            else:                  return {'code':'103','msg':'获取信息失败'}        except Exception as e:            return {'code':'102','msg':e}# 设置路由api.add_resource(QQApi, '/qqapi')if __name__ == '__main__':    app.run(debug=False)

如果你也在学习编程,请向公众号发送群号,进到交流群里一起加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值