字节流的博客

搜狗微信公众号文章临时链接转为永久链接

1. 搜狗,微信

搜狗可以搜索微信是很早的事情了,我们可以搜索公众号,公众号文章等。也可以显示某公众号最近十条群发消息。消息列表中,所有的链接都形如:

1
http://mp.weixin.qq.com/s?timestamp=1483613949&src=3&ver=1&signature=8Fa-25FTMqsFu7Wv3TOhjT6dEcjzgNpkQNe8ysGeozg3yo7xkZ6JNOCLenrXvVra1wxc-VHktbDdpwT0b8LFRDkb**gX1Peq9P86IuhqhmPaiR5J3WPae0DqgI8SB2VmDad41f1*qMbHrwdzCMrKlm3ANYStwjZ5-GJifXpVVuk=

参数中包含时间戳和签名,也就是这个链接是临时的,有过期限制,并且不能修改时间戳的值(不知道怎么签名的啊😒)。那怎么把这个临时链接转换为永久链接呢?

2. 临时链接转永久链接

(1)获取 wxuin

每一个微信号都对应一个唯一的 wxuin ,并且永久不变(纯猜测)。那怎么获取知道你的 wxuin 是多少呢?

打开 Chrome,打开 Developer Tools,扫码登录微信网页版,仔细观察 Network 栏目中的请求,在请求https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?的响应中内容中,包含标签 wxuin 节点。wxuin 标签中的值就是你刚才扫码登录的微信号对应的 wxuin 了。

(2)转换姿势

拿到 wxuin 还没有结束,先计算其 base64 值,然后赋值给 uin,将 uin 作为新的请求参数,追加到临时链接末尾,形如:

1
http://mp.weixin.qq.com/s?timestamp=1483613949&src=3&ver=1&signature=8Fa-25FTMqsFu7Wv3TOhjT6dEcjzgNpkQNe8ysGeozg3yo7xkZ6JNOCLenrXvVra1wxc-VHktbDdpwT0b8LFRDkb**gX1Peq9P86IuhqhmPaiR5J3WPae0DqgI8SB2VmDad41f1*qMbHrwdzCMrKlm3ANYStwjZ5-GJifXpVVuk=&uin=********

如果在浏览器中,请求新组装的 url,浏览器会直接帮你重定向到永久链接的地址,形如:

1
http://mp.weixin.qq.com/s?__biz=MjM5NDU0Mjk2MQ==&mid=2651622655&idx=1&sn=ab21a3117b0d62f4dcfa772c4aa46f39&scene=0#wechat_redirect

这就是这篇文章的永久链接了。

(3)代码实现

知道了转换的方式,代码实现就很简单了,如下:

1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf-8 -*-
import base64
import requests

# uin
uin = base64.b64encode('your-wxuin')

def convert_to_permanent_url(temp_url):
pre_redirect_url = "".join([temp_url, "&uin=", uin])
response = requests.head(pre_redirect_url)
permanent_url = response.headers['Location']
return permanent_url

嗯,相信你一目了然。👏

Thanks! 😊