用 Python 簡單寫個小程式,抓出我存在 Twitter 私訊裡的 tweet。

前言

身為一個邊緣人,
沒有 Instagram 帳號,
卻有台灣沒什麼人用的 Twitter 帳號也是很合理的。

其實 Twitter 上很容易得到國外第一手即時資訊,
常常看到好幾天之後才在 Facebook 或台灣的媒體看到消息,
很適合我這種資訊焦慮症的人(?

Twitter 也很容易跟一些很有名的人直接交流,
像上一篇翻譯文章的授權,
我就是直接在 Twitter 上問作者,
大概五分鐘之內,沒錯,就是短短幾分鐘之內,就收到作者同意的回覆。

總之,
我平常在用 Twitter 的時候有個習慣,
就是把我看到覺得值得保留下來的 tweet 分成兩類,
一類是比較不嚴肅的,把該 tweet 私訊給自己。
另一類是比較嚴肅的,把該 tweet 私訊給另外一個 RSS bot 帳號。
(這個 RSS bot 有機會的話會發篇文章講一下)

這裡要來用 Python 寫個程式,
把今年存下來的這兩大類 tweet 抓出來,
其實我不確定是不是一定會成功,
大概只有 87% 的把握,
總之接下來就一步步講一下要怎麼做。

(謎之音:最愛寫這種無用的小程式了。)


步驟

看有哪個 API 可以拿來用

取得 Access Token

  • https://apps.twitter.com/ 建立一個新的 App。
  • 記下 Consumer Key (API Key) 和 Consumer Secret (API Secret)
  • 點選 Permissions
    • 選取 Read, Write and Access direct messages。(原本只有 Read, Write)
    • 選好之後按底下的 Update Settings
  • 點進去剛建立的 App,移到底下,點選建立 Access Token。
  • 記下 Access Token 和 Access Token Secret

安裝要使用的 Python 套件

撰寫程式

因為兩個的作法類似,
這邊就以抓出比較嚴肅一點的 tweet 作為範例,
幾行就可以寫完了。

#!/usr/bin/env python3  

import urllib  

import twitter  


# Fill these contants by yourself.  
CONSUMER_KEY = ""  
CONSUMER_SECRET = ""  
ACCESS_TOKEN_KEY = ""  
ACCESS_TOKEN_SECRET = ""  
MY_TWITTER_ID = 0  
MY_BOT_TWITTER_ID = 0  


api = twitter.Api(  
    consumer_key=CONSUMER_KEY,  
    consumer_secret=CONSUMER_SECRET,  
    access_token_key=ACCESS_TOKEN_KEY,  
    access_token_secret=ACCESS_TOKEN_SECRET,  
)  

# Twitter API limitation:  
# "Last 30 days DMs" or "Up to 200 DMs which created before 30 days"  
sent_direct_messages = api.GetSentDirectMessages(count=200)  
for dm in sent_direct_messages:  
    if dm.recipient_id == MY_BOT_TWITTER_ID:  
        try:  
            # Got t.co url in DM, use urllib to get its real Twitter Status URL.  
            with urllib.request.urlopen(dm.text) as response:  
                real_url = response.geturl()  
        except Exception:  
            raise  
        else:  
            print("+ <{}>".format(real_url))  

開一個 gist 放個程式碼:https://gist.github.com/M157q/a90f5d2948442dc482e35d671b074c6f


結果

直接以網址呈現:
(其實應該可以直接 embed tweet 啦,但我有點懶得弄。)


題外話

在寫這篇的時候發現,
最近 Twitter 好像針對這需求有了一個新的 Bookmark 功能
看了一下,好像還不能分類就是,
所以我應該還是會繼續用這樣的方式當作 bookmark。

然後也發現好像多了個 Account Activity API
可以設定 webhook 即時接收帳號的事件,
可能可以做到類似聊天機器人這樣事件觸發式的對話。

如果是這裡的用途的話,
可以在我每次發送私訊的時候,
就直接透過 webhook 把該 tweet 的內容存在資料庫裡,
這樣就不會受 Twitter API 的限制了,
有空的話再來弄吧。


Share


Donation

如果覺得這篇文章對你有幫助, 除了留言讓我知道外, 或許也可以考慮請我喝杯咖啡, 不論金額多寡我都會非常感激且能鼓勵我繼續寫出對你有幫助的文章。

If this blog post happens to be helpful to you, besides of leaving a reply, you may consider buy me a cup of coffee to support me. It would help me write more articles helpful to you in the future and I would really appreciate it.


Related Posts