丨爬取API
关于编程猫的qq and WeChat的接口我已经为大家准备好了,拿来用就好了。
QQ平台://www.codemao.cn/get-qq-code.html?appid=101253342&pid=65edCTyg&redirect_uri=https://shequ.codemao.cn/static/third_login-v3.html?product_code=community+from=https://shequ.codemao.cn/
WeChat平台://www.codemao.cn/get-weixin-code.html?appid=wxeda82dc272f7fe92&scope=snsapi_login&pid=65edCTyg&redirect_uri=https://shequ.codemao.cn/static/third_login-v3.html?product_code=community+from=https://shequ.codemao.cn/
丨原理所在
你可能想,我需要按照开放平台那样,获取第三方平台回调过来的一系列参数然后还是不能得到编程猫的数据吧?还要下载SDK?那你就错了,明确的告诉您:不需要。在登录编程猫过程中只需要抓取token(也就是cookie)就好。那么我就用Python给个例子吧!
首先,利用PyQt5搭建内置浏览器,使用第三方平台登录编程猫,登录后就获取cookie!然后就好啦!
图示如下:
丨源码案例
考虑到社区总体能力,本次分享常用Python案例来实现第三方登录。
其次我也分享一个裕语言案例来实现第三方登录。
那么,准备开始咯!
丨python案例
编程猫后援会客户端(点到猫PC版)就是用到这个方式来实现的。
首先需要导入PyQt5库。对了,这玩意还需要几个文本文件,ms.txt,cookie.txt用来存储cookie等。为了您可以正常运行请到末尾下载源码。这里仅说明。不多说,上代码:
#导入库,友情提醒:打包后文件超大的,并且效率会变低。
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QMessageBox
# 先来个GUI(用户窗口)。展示给用户的。
class window(QWidget):
def __init__(self):
super().__init__()
self.setup()
def setup(self):
self.box = QVBoxLayout(self) # 创建一个垂直布局来放控件
self.web = MyWebEngineView() # 创建浏览器组件对象
self.web.resize(800, 600) # 设置窗口大小
self.btn_get = QPushButton('登录成功之后点击我!') # 创建一个按钮。点击获取cookie
self.btn_get.clicked.connect(self.get_cookie) # 绑定按钮点击事件
with open("ms.txt", "r") as f: # 打开文件
data = f.read() # 读取文件。接下来判断是哪个平台打开
if data == "qq":
d = "https://www.codemao.cn/get-qq-code.html?appid=101253342&pid=65edCTyg&redirect_uri=https://shequ.codemao.cn/static/third_login-v3.html?product_code=community+from=https://shequ.codemao.cn/"
elif data == "wx":
d = "https://www.codemao.cn/get-weixin-code.html?appid=wxeda82dc272f7fe92&scope=snsapi_login&pid=65edCTyg&redirect_uri=https://shequ.codemao.cn/static/third_login-v3.html?product_code=community+from=https://shequ.codemao.cn/"
self.web.load(QUrl(d)) #设置浏览器网址
f.close()
self.box.addWidget(self.btn_get) # 放入按钮
self.box.addWidget(self.web) # 再放浏览器
self.web.show() # 最后让页面显示出来
def get_cookie(self):
kk = str(self.web.url()).split("('")[1]
kk = kk.split("')")[0]
if "https://shequ.codemao.cn/static/" in kk:
self.web.setUrl(QUrl("https://shequ.codemao.cn"))
cookie = self.web.get_cookie()
with open("cookie.txt", "w") as f:
f.write(cookie)
QMessageBox.warning(self, "注意", "登陆成功了,请手动点击右上角关闭界面")
# 创建自己的浏览器控件,继承自QWebEngineView
class MyWebEngineView(QWebEngineView):
def __init__(self, *args, **kwargs):
super(MyWebEngineView, self).__init__(*args, **kwargs)
# 绑定cookie被添加的信号槽
QWebEngineProfile.defaultProfile().cookieStore().cookieAdded.connect(self.onCookieAdd)
self.cookies = {} # 存放cookie字典
def onCookieAdd(self, cookie): # 处理cookie添加的事件
name = cookie.name().data().decode('utf-8') # 先获取cookie的名字,再把编码处理一下
value = cookie.value().data().decode('utf-8') # 先获取cookie值,再把编码处理一下
self.cookies[name] = value # 将cookie保存到字典里
# 获取cookie
def get_cookie(self):
cookie_str = ''
for key, value in self.cookies.items(): # 遍历字典
cookie_str += (key + '=' + value + ';') # 将键值对拿出来拼接一下
return cookie_str # 返回拼接好的字符串
if __name__ == "__main__":
app = QApplication(sys.argv)
w = window()
w.show()
sys.exit(app.exec_())
input("please input any key to exit!")
好了,如果运行起来效果就和上面的图片展示就差不多了。然后cookie就会保存到cookie.txt文件里面了。
丨裕语言(iapp)案例
这玩意是一个很简单同时也很适合我经常不在电脑边的人。他是一个手机上的编辑器,从可视化设计到编码最后到打包,可以说是一键式的。点到猫APP就是用它制作的,当然等放暑假的时候再用Kotlin制作吧~
首先创建一个iyu界面,创建一个浏览器组件,id为1。然后在载入事件输入以下代码:
.改变浏览器用户代理(UA)为电脑,不然登录不了QQ,回调不到程序里面。我不是用SDK的。
gvs(1,web) .获取浏览器组件
call(null,"mjava","m.setua",web,"电脑")
uycl("#ffffffff",false)
us(1,"url","这里输入QQ或者wx的登录链接。") .设置浏览器链接
因为改变用户代理编辑器里面没有函数,需要我们自己调用安卓API来实现。新建一个m.mjava文件,输入代码:
//导入安卓库,用来设置代理。
import android.webkit.WebSettings;
import android.webkit.WebView;
public static void setua(WebView webview,String UUA)
{
String ua=webview.getSettings().getUserAgentString();
webview.getSettings().setUserAgentString(UUA);
}
好了,那我们再回到iyu界面点击浏览器然后在浏览器事件里面点击网址加载完成时,输入代码:
ug(1,"url",a) .获取浏览器网址
f(a?"https://shequ.codemao.cn/static/") .如果网址包含
{
f(a?"https://www.codemao.cn/get-")
{}
else{
us(1,"url","https://shequ.codemao.cn")
ug(1,"url",url)
cls("android.webkit.CookieManager",anyi) .导入安卓webkit接口对象。
javax(ilovewss,"CookieManager",anyi,"getInstance") .调用函数,获取cookie。
javax(mcookie,ilovewss,anyi,"getCookie","String",url)
syso(mcookie) .打印到控制台
.获取到cookie再提交数据获取用户数据然后显示出来
t()
{
s a = "https://api.codemao.cn/web/users/details"
hs(a, null, "utf-8", mcookie, "User-Agent=Mozilla/5.0 (iPad; U; CPU OS 6_0 like Mac OS X; zh-CN; iPad2)||accept=*/*||accept-language=zh-CN",b)
ufnsui()
{
f(b!=null)
{
tw(b)
}else
{
tw("登录失败")
} } } } }
嗯,到目前为止已经搞定了。那么运行一下就没问题了,对了您仔细发现第三方平台登录可能会限制输入账号密码登录,需要扫码,如果程序可在后台运行就直接截图到qq扫码登录就好了。当然也可以分屏扫码。当然。浏览器还可以长按保存图片,隐藏缩放按钮了,当然也不重要,我就不放代码了,我觉得你们已经头晕了。红红火火恍恍惚惚!
丨源码下载
Python源码:https://vifan.lanzoux.com/iLjfrxaadwd
裕语言源码:https://vifan.lanzoux.com/iHiPUxaaeli (解压后导入到iapp程序里)