---
title: "Twitter x OAuth x Python = Tweepy"
url: https://sammy.hk/twitter-oauth-python-tweepy/
author: Sammy Fung
published: 2010-08-20T10:00:34+08:00
modified: 2018-03-22T00:17:47+08:00
description: "先說一句，我不喜歡 Twitter 廢除其 API 原有只使用 username/password 的 Basic User Authentication 方法。 因為我覺得 twitter 在宣佈有關功能停用日子之時，不太多 twitter 程序使用 twitter oauth (FAQ)。加上我所使用的 pytho…"
categories: ["開放源碼"]
tags: [python]
source: https://sammy.hk
---
[![](http://farm5.static.flickr.com/4080/4908010972_486fc32c0d.jpg)](http://www.flickr.com/photos/sammyhk/4908010972)

先說一句，我不喜歡 Twitter 廢除其 API 原有只使用 username/password 的 Basic User Authentication 方法。

因為我覺得 twitter 在宣佈有關功能停用日子之時，不太多 twitter 程序使用 twitter oauth ([FAQ](http://dev.twitter.com/pages/oauth_faq))。加上我所使用的 [python-twitter](http://code.google.com/p/python-twitter/) 版本並不支援 oauth，一直也找不到任何包含 oauth 的 python-twitter 開發版本 (dev version)。也是說我除了需要改 [@weatherhk](http://twitter.com/weatherhk)、[@tctrack](http://twitter.com/tctrack)、[@tropicalhk](http://twitter.com/tropicalhk) 的程式之外，也需要另找一個 python lib 取代 python-twitter。(氣!)

**Tweepy 與 Twitter OAuth**

訴苦完後，讓我進入正題了。

試過不同的 twitter oauth python library，到最後一刻才發現 joshthecoder 寫的 [tweepy](http://github.com/joshthecoder/tweepy)，而我也可以容易地把 tweepy 在我原來的 python code 上 get it work。

在開發 Twitter oauth 應用軟件前，要先到 Twitter [登記](http://dev.twitter.com/apps/new)自己的應用軟件，來取得代表自己應用軟件本身一對的 consumer key 和 consumer secret。在以下程式例子，我用了 appkey 和 appsecret 變數來代表這 pair key 和 secret。

然後，應用軟件需要問 Twiiter 取得用某戶帳號的存取權限，那麼再需要另一 pair key 和 secret，稱為 access token。取得用戶授權自己應用軟件的 token，可以先透過 get\_authorization\_url() 來提供「要求授權」的網址給某用戶 (如本文最頂的圖片)。

在用戶准許後，Twitter 回傳一個「授權碼」給用戶。然後應用程式取得「授權碼」後，可以透過 get\_access\_token() 來取得 access token。應用程式自行儲存這 access token 後，每次只需重新使用這 token，便可取得用某戶帳號的存取權限。

**OAuth 與 Twitter OAuth 的好處**

OAuth 相比 username/password 除了不用儲存用戶名稱和密碼外，就算用戶變更帳號密碼，也不用修改應用程式中的用戶密碼。而且 Twitter 的 OAuth 提供大一倍的 rate limit。以往除了知名 twitter clients 外，經 twitter API 發出的 tweet 只會標明 [via API](http://twitter.com/tctrack/status/20949687188)。但現在經由 twitter oauth api 發出，則可以如本文下圖一樣，標明應用程式的名稱 (例如 [via sammy.hk](https://twitter.com/sammyfung/status/21591852912))。

**由舊 Twitter API 轉換至新 Twitter OAuth API**

最後，我在原有以上三個會在 twitter 發 tweets 的氣象程式中，大約作了類似以下修改。為了更方便大家明白，所以以下程式是從我的程式改動過的。

> **首先載入 library 一行….**
> 
> 把：
> 
> import twitter
> 
> 換為：
> 
> import tweepy

> **Twitter 用戶認證部份由簡單一兩行……**
> 
> 把：
> 
> if config.tweeting\_feature = yes:
> tweetit = twitter.Api(username=config.myusername, password=config.mypassword)
> 
> 換為：
> 
> if config.tweeting\_feature = yes:
> tweetauth = tweepy.OAuthHandler(config.appkey, config.appsecret)
> if (config.userkey == ”):
> print ‘Authorization URL: ‘ + tweetauth.get\_authorization\_url()
> verifier = raw\_input(‘Verifier:’)
> tweetauth.get\_access\_token(verifier)
> print ‘config.userkey = ‘ + tweetauth.access\_token.key
> print ‘config.usersecret = ‘ + tweetauth.access\_token.secret
> else:
> tweetauth.set\_access\_token(config.userkey, config.usersecret)
> tweetit = tweepy.API(tweetauth)

[![](http://farm5.static.flickr.com/4136/4907419851_16aa912bd3.jpg)](http://www.flickr.com/photos/sammyhk/4907419851)

> **到出 tweet 時……**
> 
> 把：
> 
> tweetit.PostUpdate(u”今天天氣好好好!”)
> 
> 換為：
> 
> tweetit.update\_status(u”根據李氏力場理論，發出八號烈風或暴風信號機會為零! XDDD”)

### 相關文章：

1. [寫 Python程式去追風](https://sammy.hk/use-python-to-track-tropical-cyclone/ "寫 Python程式去追風")
2. [Pynguin 自動產生 Python 單元測試](https://sammy.hk/pynguin-%e8%87%aa%e5%8b%95%e7%94%a2%e7%94%9f-python-%e5%96%ae%e5%85%83%e6%b8%ac%e8%a9%a6/ "Pynguin 自動產生 Python 單元測試")
3. [2021 Python 軟件基金會董事會改選](https://sammy.hk/2021-python-%e8%bb%9f%e4%bb%b6%e5%9f%ba%e9%87%91%e6%9c%83%e8%91%a3%e4%ba%8b%e6%9c%83%e6%94%b9%e9%81%b8/ "2021 Python 軟件基金會董事會改選")
4. [Linux Forum Asia 2005 之後感](https://sammy.hk/linux-forum-asia-2005-%e4%b9%8b%e5%be%8c%e6%84%9f/ "Linux Forum Asia 2005 之後感")
