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