七沢みあさんの画像で癒されたい　そんなときはTwitter APIを叩こう♪

#はじめに
今回はWebAPIの中の**Twiiter API**を扱っていきます。
Twiiter APIを利用すると以下の2点作業が自動でできるようになります。

①特定の条件を満たす投稿を取得
②自分のアカウントで自動的に投稿

今回は①を実行してみます。

AV女優として活躍され、自分が一番お世話になっている**七沢みあさん**のTweetの中から、投稿された画像を自動で取得していきます。


#TwitterのKeys&Tokensを取得
```py
#API key
consumer_key = "???"
#API secret key
consumer_secret = "???"
#Access token
access_token = "???"
#Access token secret
access_token_secret = "???"
#各々取得して???に代入してください。
```

```py
#「pip install tweepy」を実行して下さい
import tweepy

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
```

#七沢みあさんのTwitterアカウント&フォロワー数を取得

下記のコードの詳細は
https://kurozumi.github.io/tweepy/getting_started.html#hello-tweepy
に書かれています。

```py
def show_user_profile():
  user = api.get_user('mia_nanasawa')
  print(user.screen_name) #アカウント名取得
  print(user.followers_count) #フォロワー数取得
```

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/4b31629e-c3a8-7466-5593-e8b3f3e14ec2.png" class="img" alt="データ">

下記のTwitter画像から、正しく**アカウント名**,**フォロワー数**を取得できていることが分かりますね。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/68dc3528-58ec-6d68-78ab-e4846f0c55ca.png" class="img" alt="データ">

#七沢みあさんのTweet情報を取得(複数の画像)

user_timelineの使い方は
https://kurozumi.github.io/tweepy/api.html
に書かれています。

```py
import json

user_id = "mia_nanasawa"
statuses = api.user_timeline(id=user_id, count=4)
for status in statuses:
    #jsonを見やすくするためのワザ
    print(json.dumps(status._json, indent=2))
```

**entitiesとextended_entities**の中にurlが入ってることがわかる。
一つの投稿に複数の写真が含まれている場合は、**extended_entities**にのみ複数の写真が含まれることが調べてみると、分かった。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/ea59564a-0de3-b2a5-8f89-58b59ae1afd8.png" class="img" alt="データ">



```py
def show_media_url():
  user_id = "mia_nanasawa"
  statuses = api.user_timeline(id=user_id, count=4)

  for status in statuses:
    for entity in status.extended_entities["media"]:
      img_url = entity["media_url"]
      print(img_url)
    break
```

#画像をダウンロード
```py
def download_image(url, file_path):
  r = requests.get(url, stream=True)

  if r.status_code == 200:
    with open(file_path, "wb") as f:
      f.write(r.content)
```

#実行
Cursorの使い方は
https://kurozumi.github.io/tweepy/cursor_tutorial.html
に書かれています。


```py
import requests
import tweepy

def main():
  user_id = "mia_nanasawa"
  for page in tweepy.Cursor(api.user_timeline, id=user_id).pages(20):
    for status in page:
      try:
        for media in status.extended_entities["media"]:
          media_id = media["id"]
          img_url = media["media_url"]
          print(media_id)
          print(img_url)

          #カレントディレクトリに"imagesフォルダ”を作成しときます。
          download_image(url=img_url, file_path="./images/{}.jpg".format(media_id))

      #tryの中でエラーが発生したら、例外が出力されループを回す
      except Exception as e:
        print(e)
        #動画を含むツイートの際にエラーが起きてる可能性がある。

if __name__ == "__main__":
    main()
```

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/cf7bc506-9593-247a-ca07-7f0987e96b0f.png" class="img" alt="データ">

上記の出力から、いくつか**エラー処理**が発生していることが分かります。
恐らく、画像ファイルではなく、**動画**がTweetに含まれていることが予想されます。
(因みに、Tweetされた画像は正しく取得できています。)

#結果

<img width="1900" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/2b1931a3-d6ea-648a-f053-08323d584389.png" class="img" alt="データ">

正しくimagesファイルに保存されていることが確認できました。

これで目の保養ができましたね。