前幾個(gè)月買了 NintendoSwitch ,沉迷于“塞爾達(dá)-荒野之息”不能自拔,同時(shí)也關(guān)注著NS 新游戲的資訊。 微博上有幾個(gè)帳號(hào)會(huì)發(fā)布各種NS 游戲信息,不過微博做的和:hankey: 一樣,完全不想用。聯(lián)系了那幾個(gè)微博博主,詢問是否考慮也同步發(fā)在Twitter,沒理我,那就自己動(dòng)手吧。
爬取微博
本來還以為得手動(dòng)解析網(wǎng)頁,偶爾發(fā)現(xiàn)移動(dòng)版居然有現(xiàn)成的API 可以用,十分酸爽。
例如:
http://m.weibo.cn/u/5084965647
http://m.weibo.cn/api/container/getIndex?containerid=1076035084965647&page=2
結(jié)構(gòu)挺清晰的,data-cards 就是每一條微博,不過會(huì)有不同的card-type,選出card-type=9 的即可。
每一個(gè)card 里面,主要關(guān)注:
- itemid: 微博的唯一ID
- text: 文本內(nèi)容
- pics: 圖片
- page_info: 如果帶視頻,會(huì)有一個(gè)page_info,其中包含視頻信息
這些接口應(yīng)該有頻率限制,不過我只想抓較新的,幾十分鐘訪問一次即可。
發(fā)布到Twitter
創(chuàng)建一個(gè)帳號(hào),然后再在這個(gè)帳號(hào)下創(chuàng)建一個(gè) apps.twitter.com,直接生成一堆token,這樣最方便。
關(guān)于Twitter 的認(rèn)證可以參考: OAuth 認(rèn)證步驟
重點(diǎn)得到這四個(gè)東西即可:
CONSUMER_KEY = 'your-consumer-key' CONSUMER_SECRET = 'your-consumer-secret' ACCESS_TOKEN = 'your-access-token' ACCESS_TOKEN_SECRET = 'your-access-secret'
關(guān)于圖片和視頻上傳可以參考: twitterdev/large-video-upload-python
微博的text 中帶了大量的鏈接,需要處理一下,用re.sub 替換掉即可。
微博的話題是 #話題#
,而Twitter 是 #話題
,也需要處理一下。
t = card["mblog"]["text"] t = re.sub(r'data-url=\"([^\" ]+)\"', r'> \1 <', t, 0) t = re.sub(r'<[^<]*>', r'', t, 0) t = re.sub(r'#([^#]+)#', r'#\1', t, 0)
關(guān)于圖片、視頻的幾個(gè)問題:
-
Twitter 的圖片(除GIF 之外)限制一條tweet 只能發(fā)4張,微博可以有多張,需要注意拆分,然后把先進(jìn)條tweet 的ID 作為第二條的
in_reply_to_status_id
,就能串成所謂的“主題帖”; - Twitter 的視頻有一大堆限制,允許的視頻時(shí)長(zhǎng)也很短。索性不傳視頻了,直接保留微博原來的秒拍跳轉(zhuǎn)鏈接;
- GIF 圖片,Twitter 一條tweet 也只能傳一張,還不能是動(dòng)圖,懶得判斷,直接丟棄GIF 圖了。
-
傳圖片和視頻時(shí),記得帶上
media_category
,圖片是tweet_image
,視頻是tweet_video
。
寫好之后,丟到VPS 上,15分鐘運(yùn)行一次即可。
@NinSwitch_News

代碼就不發(fā)了,寫得很快很糙,也沒啥難度。