Python Tweepy備忘録

##はじめに
Python Tweepyを使ってツイートの送信・取得・検索やユーザーのフォロワーの確認、DMの確認・送信をしてみた。

##TweepyのinstallとTwitter Developerの登録

　tweepyを使うにはTwitter APIが必要なので、下記の公式tweepyドキュメンテーションを見て、twitter developersへ登録する。もちろんクライアント側はpython moduleも必要なので、tweepyをinstallする。tweepyの使い方も以下のリンク資料に書いてある。

```
pip install tweepy
```

https://docs.tweepy.org/en/latest/api.html

https://developer.twitter.com/en/portal/projects-and-apps

### 認証キーの設定とOAuth認証、APIのインスタンス生成
　IDやパスワードが不要でアプリケーション間の連動ができるOAuth認証を採用しており、各ユーザーがアクセスキーを生成してそのアクセスキーで認証を行う。Webシステムとの対話は、URL形式でHTTP Request/Responseをするtwitter REST APIでアクセスすることができ、得られたレスポンスはModel class instanceとして、INSTANCE.CLASSで各classにアクセスすることができる。

```python
consumer_key =  "API key"
consumer_secret = "API secret key"
access_token =  "Access token"
access_token_secret = "Access token secret"
auth = tweepy.OAuthHandler(consumer_key,consumer_secret)
auth.set_access_token(access_token,access_token_secret)

api = tweepy.API(auth)
```
###1. ツイートする
```python
user = 'my_userid'
message = "Hello!"
api.update_status(message)
```
###2. 特定のユーザーのtimeline取得
```python
user = 'qiita_python'
for i, status in enumerate(tweepy.Cursor(api.user_timeline,id=user,tweet_mode="extended").items(10)):
    print(i,"  :  ",status.full_text)
```

###3. 特定のユーザーをフォローしている人フォローされている人を取得
```python
user = "qiita_python"
print("Name : @Name")
for status in tweepy.Cursor(api.friends,id=user).items(10):
    print("%s : %s "%(status.name,status.screen_name) )
print("-"*100)
for status in tweepy.Cursor(api.followers,id=user).items(10):
    print("%s : %s "%(status.name,status.screen_name) )
```
###4. 特定のユーザーのプロフィールを取得
```python
user_id = "qiita_python"
user = api.get_user(user_id)
print(user.description)
print(user.profile_image_url_https)
```
###5. 特定のユーザーのメディアファイルをダウンロードする
```python
key_account = 'qiita_python'
search_results = tweepy.Cursor(api.user_timeline, screen_name=key_account, include_rts=False, tweet_mode='extended', include_entities=True).items(10)

for result in search_results:
    if hasattr(result, 'extended_entities'): 
        ex_media = result.extended_entities['media']
        for image in ex_media:
            image_url = image['media_url']
            image_name = image_url.split("/")[len(image_url.split("/"))-1]
            urllib.request.urlretrieve(image_url + ':orig', 'img/' + image_name)
    else:
        print('No media')
```
###6. 特定ユーザーへDMの送信
```python
ID = 'qiita_python'
text = 'Hello!'
event = {
  "event": {
    "type": "message_create",
    "message_create": {
      "target": {
        "recipient_id": ID
      },
      "message_data": {
        "text": text
      }
    }
  }
}
api.send_direct_message_new(event)
```
###7. 受け取ったDMの確認
```python
direct_messages = api.list_direct_messages()
for direct_message in direct_messages:
    print(direct_message)
```
###8. 特定箇所から半径何km圏内のツイートを検索して、ユーザーと内容を取得
```python
for status in tweepy.Cursor(api.search,q="東京駅",geocode="35.681698005508686,39.7671958524044,10km").items(10):
    if "location" in status._json["user"].keys():
        print("%s : %s : %s" %(status.created_at,status.user.location,status.text))
    else:
        print("%s : nan : %s" %(status.created_at,status.text))
```

##まとめ
Python Tweepyを使ってみた。
できることは以下の公式ページに書いてるので、それを参考にすればしたいことができると思います。
[Twitter API v1.1 Reference](https://docs.tweepy.org/en/latest/api.html)