一日一万字の感謝の写経

一日一万字の感謝の写経をして強くなります。そのうち本を置き去りにして何かを作り始める予定です。

python-twitterモジュールからtwitter APIを使用する方法

目次

目的

 この記事では、PythonからtwitterAPIを操作するためのモジュールであるpython-twitterの基本的な使い方を紹介します。公式ドキュメントは以下になります。

公式ドキュメント:python-twitter

前提条件

 この記事では、以下のことに断っておきます。まだまだ勉強不足なことが多く、言葉の使い方などが誤っているかもしれませんがお許しください。

  • この記事の対象はtwitterでフォローリフォローを自動化したい、Pythonからtwitterの検索結果を取得したいなど、twitterAPIを個人的に利用したい方向けの記事となります。不特定多数のユーザーに対するアプリケーションを作ることは想定していません。

  • 僕はまだまだ勉強不足なので、実行環境などの詳しい説明ができないということを断っておきます。とりあえず、OSはwindows10で実行しています。Python は3.6.8でした。

  • 既にTwitterのアプリケーションは作成済みで、APi key、APi secret key、Access token、Access token secretの四つを取得済みであることを想定しています。まだの方はTwitter Appからアプリケーションを作成し、各キーを取得しておいてください。

  • コードの実行はJupyter Labになります。

  • ただ、初心者の私でもなんとか使用することができたpython-twitterモジュールの日本語での説明があまり見当たらなかったので、少しでも役に立てればと思った次第でこの記事を書きました。

インストール

 以下のコマンドでインストールができます。僕はAnaconda Promptから実行しました。コマンドプロンプトからでも実行ができるでしょう。

(base) C:\Users\hoge>pip install python-twitter

インポートとApiインスタンスの作成

 python-twitterモジュールのインポートは以下のように行います。名前がpython-twitterなのにインポートはtwitterという名前でインポートするので少し紛らわしいです。

import twitter

APIを使用するにはApiクラスのインスタンスを作成します。このときに、あらかじめ用意した四つのキーが必要になります。アプリケーションの画面から確認してください。

f:id:koheitsutsumi223:20190414172624p:plain

上の画面を参考に、各引数にキーを渡してください。以下は例になります。

api = twitter.Api(consumer_key='kdWcdakeVdDF4PAdKWERTdkekL',
                  consumer_secret='3k22kwkLfN2KKasdeAa2A1aKUIUvbW83S11AaakA123ASDaASD',
                  access_token_key='12344566778890123561aaaaAaasAaA1AAAasAdfHJKklAlA89',
                  access_token_secret='asdGHjkKa1K1asdfgHjK45lASDfHJKklaDasJKlHjDasd',
                 )

apiインスタンスのメソッド

 以下に、apiインスタンスメソッドを羅列します。

api.PostUpdates(status)
api.PostDirectMessage(user, text)
api.GetUser(user)
api.GetReplies()
api.GetUserTimeline(user)
api.GetHomeTimeline()
api.GetStatus(status_id)
api.GetStatuses(status_ids)
api.DestroyStatus(status_id)
api.GetFriends(user)
api.GetFollowers()
api.GetFeatured()
api.GetDirectMessages()
api.GetSentDirectMessages()
api.PostDirectMessage(user, text)
api.DestroyDirectMessage(message_id)
api.DestroyFriendship(user)
api.CreateFriendship(user)
api.LookupFriendship(user)
api.VerifyCredentials()

この記事では、いくつかのメソッドを例にしてpython-twitterモジュールの使い方を紹介します。

ユーザーの情報を取得する

 ユーザーの情報を取得する方法を紹介します。今回は皆さん大好きのデレステの公式アカウント@imascg_stageさんの情報を取得してみます。

f:id:koheitsutsumi223:20190414172906p:plain

 ユーザーの情報を取得するにはapi.GetUserメソッドを使用します。api.GetUserメソッドのscreen_name引数に取得したいユーザーの名前(@でリプライするときに使用する名前)を渡して実行します。

imascg_stage = api.GetUser(screen_name='imascg_stage')

 twitter.models.Userという型のインスタンスが生成されます。

type(imascg_stage)

Output:

    twitter.models.User

得られた情報はAsDictメソッドにより辞書に変換できます。アカウントのプロフィールやフォロー数、フォロワー数などなどたくさんの情報が見られます。

imascg_stage.AsDict()

Output:

    {'created_at': 'Tue May 19 09:34:46 +0000 2015',
     'description': '「アイドルマスター シンデレラガールズ スターライトステージ」公式アカウントです。※お客様からの個別のメッセージなどは、Twitter上ではご返答できかねますのでご了承下さい。 #デレステ Android:http://t.co/PfCtF9Biv4       iOS:http://t.co/0zb47ZumGb',
     'followers_count': 918550,
     'friends_count': 8,
     'id': 3220191374,
     'id_str': '3220191374',
     'lang': 'ja',
     'listed_count': 10040,
     'name': 'スターライトステージ',
     'profile_background_color': '000000',
     'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png',
     'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png',
     'profile_banner_url': 'https://pbs.twimg.com/profile_banners/3220191374/1535901092',
     'profile_image_url': 'http://pbs.twimg.com/profile_images/875515457364557825/zzJa2735_normal.jpg',
     'profile_image_url_https': 'https://pbs.twimg.com/profile_images/875515457364557825/zzJa2735_normal.jpg',
     'profile_link_color': '89C9FA',
     'profile_sidebar_border_color': '000000',
     'profile_sidebar_fill_color': '000000',
     'profile_text_color': '000000',
     'screen_name': 'imascg_stage',
     'status': {'created_at': 'Fri Apr 12 11:06:55 +0000 2019',
      'hashtags': [{'text': '放課後スタジオ'}],
      'id': 1116658954640035842,
      'id_str': '1116658954640035842',
      'lang': 'ja',
      'retweet_count': 430,
      'retweeted_status': {'created_at': 'Fri Apr 05 16:25:58 +0000 2019',
       'favorite_count': 858,
       'hashtags': [{'text': '放課後スタジオ'}],
       'id': 1114202530177622016,
       'id_str': '1114202530177622016',
       'lang': 'ja',
       'retweet_count': 430,
       'source': '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>',
       'text': '【#放課後スタジオ キャンペーン!】\n\n「アイドルマスター シンデレラガールズ U149 放課後スタジオ」を聴くとU149パーカーが抽選で当たるキャンペーンがスタート!\n\n応募締切は【5/13 12時】まで!\n詳細はこちらから⇒… https://t.co/r35dQuZ5yR',
       'truncated': True,
       'urls': [{'expanded_url': 'https://twitter.com/i/web/status/1114202530177622016',
         'url': 'https://t.co/r35dQuZ5yR'}],
       'user_mentions': []},
      'source': '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
      'text': 'RT @cycomi: 【#放課後スタジオ キャンペーン!】\n\n「アイドルマスター シンデレラガールズ U149 放課後スタジオ」を聴くとU149パーカーが抽選で当たるキャンペーンがスタート!\n\n応募締切は【5/13 12時】まで!\n詳細はこちらから⇒https://t.co/…',
      'urls': [],
      'user_mentions': [{'id': 4023021733,
        'id_str': '4023021733',
        'name': 'サイコミ',
        'screen_name': 'cycomi'}]},
     'statuses_count': 2409,
     'url': 'http://t.co/7REykaZIlX',
     'verified': True}

各情報にアクセスするには辞書で確認したアトリビュートを使用します。たとえば、プロフィールを表示したい場合はdescriptionというアトリビュートを指定します。

imascg_stage.description

Output:

    '「アイドルマスター シンデレラガールズ スターライトステージ」公式アカウントです。※お客様からの個別のメッセージなどは、Twitter上ではご返答できかねますのでご了承下さい。 #デレステ Android:http://t.co/PfCtF9Biv4       iOS:http://t.co/0zb47ZumGb'

 また、api.GetUserメソッドは各ユーザーに割り振られているIDを引数に渡すことでもユーザーの情報を取得することができます。WebからIDを確認する方法は僕は知りませんが、twitter.models.Userインスタンスidアトリビュートで確認できます。例えば、@imascg_stageさんのIDは以下のように3220191374であると確認できます。

imascg_stage.id

Output:

    3220191374

このIDをapi.GetUserメソッドに渡してユーザーの情報を取得してみます。

imascg_stage = api.GetUser(user_id=3220191374)
imascg_stage.screen_name

Output:

    'imascg_stage'

このように、ユーザーの情報が取得できました。

ユーザーのツイートを取得する

 ユーザーのツイートを取得する方法を紹介します。これはapi.GetUserTimelineメソッドを使用します。api.GetUserTimelineメソッドもユーザーの名前かIDを渡すことで実行できます。@imascg_stageさんのツイートを見てみましょう。

imascg_stage_tl = api.GetUserTimeline(screen_name='imascg_stage')

または

imascg_stage_tl = api.GetUserTimeline(user_id=3220191374)

の様に実行します。ツイートは以下のようにリストで取得されます。

imascg_stage_tl

Output:

    [Status(ID=1116658954640035842, ScreenName=imascg_stage, Created=Fri Apr 12 11:06:55 +0000 2019, Text='RT @cycomi: 【#放課後スタジオ キャンペーン!】\n\n「アイドルマスター シンデレラガールズ U149 放課後スタジオ」を聴くとU149パーカーが抽選で当たるキャンペーンがスタート!\n\n応募締切は【5/13 12時】まで!\n詳細はこちらから⇒https://t.co/…'),
     Status(ID=1116588012937170944, ScreenName=imascg_stage, Created=Fri Apr 12 06:25:02 +0000 2019, Text='営業コミュを追加しました!\n新しい営業コミュは以下の4話です!\n\nアイドル体操で体健やかに!\n希望を歌う少女・異世界編\n旅の醍醐味は星への道のり\nフィッシングだよ!L.F.B.G\n#デレステ https://t.co/qiwP1Q10Ra'),
     Status(ID=1116587652227035137, ScreenName=imascg_stage, Created=Fri Apr 12 06:23:36 +0000 2019, Text='『シンデレラガールズ劇場わいど☆』第109話が公開されました!\nデレコネからチェックしましょう!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/tQOXlKxZAC'),
     Status(ID=1116587465882497027, ScreenName=imascg_stage, Created=Fri Apr 12 06:22:51 +0000 2019, Text='イベント「シンデレラキャラバン」開始です!\n今回の新アイドルは以下の2人です!\n<限定アイドル>\n梅木音葉(Sレア)\n並木芽衣子(Sレア)\n#デレステ https://t.co/iBCFCJj8Jf'),
     Status(ID=1116587262341312513, ScreenName=imascg_stage, Created=Fri Apr 12 06:22:03 +0000 2019, Text='本日初登場のアイドル、砂塚あきらちゃんをご紹介します!\n\nあきらちゃんはSNSを使いこなす、さとり世代の15歳です!\n彼女のテンションがアガるようなプロデュース、よろしくお願いします!… https://t.co/S3jXMjkqyo'),
     Status(ID=1116587059169222656, ScreenName=imascg_stage, Created=Fri Apr 12 06:21:14 +0000 2019, Text='新しいアイドル、砂塚あきらちゃんが登場しました!\n今ならログインボーナスでもらえるほか、LIVEやローカルオーディションガシャでも獲得できますよ!\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/K8IJyl9Q92'),
     Status(ID=1116586883423715329, ScreenName=imascg_stage, Created=Fri Apr 12 06:20:32 +0000 2019, Text='タイプセレクトガシャを開始しました!\n対象タイプは毎日15時に更新されますよ!\n詳細はゲーム内のお知らせを確認してくださいね!\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/QDJe24rTL0'),
     Status(ID=1116586605941149696, ScreenName=imascg_stage, Created=Fri Apr 12 06:19:26 +0000 2019, Text='SSレアアイドルが1人確定で出現する「プレミアムオーディションガシャ」の販売を開始しました!\n販売期間中、1回のみ購入することができます!\n出現するアイドルが期間ごとに異なるので、ゲーム内のお知らせを確認してくださいね!\n#デレステ https://t.co/1AQbYGxEca'),
     Status(ID=1116220420082946048, ScreenName=imascg_stage, Created=Thu Apr 11 06:04:21 +0000 2019, Text='「第8回シンデレラガール総選挙」を、ソーシャルゲーム「アイドルマスター シンデレラガールズ」との合同で開催いたします!\n開催は4月16日の15時からを予定しています。お気に入りのアイドルに投票しましょう!\n#デレステ… https://t.co/uzJ596Bp6N'),
     Status(ID=1116009855834181632, ScreenName=imascg_stage, Created=Wed Apr 10 16:07:38 +0000 2019, Text='「わくわく☆スプリングキャンペーン」を開催中です!\nスタージュエル毎日プレゼントやマニーショップの期間限定販売など、5つのキャンペーンを実施しています!\n詳しくはゲーム内のお知らせを確認してくださいね!… https://t.co/PPyppg1Wno'),
     Status(ID=1115861216293994498, ScreenName=imascg_stage, Created=Wed Apr 10 06:17:00 +0000 2019, Text='期間限定イベント「シンデレラキャラバン」の開催が決定しました!\n期間中はLIVE後に追加報酬が確率で出現!\nキャラバンメダルを集めると、限定アイドルを確実にスカウトできますよ!\n4月12日15時から開催予定です!\n#デレステ https://t.co/YZMsFItMIz'),
     Status(ID=1115860982079922176, ScreenName=imascg_stage, Created=Wed Apr 10 06:16:04 +0000 2019, Text='イベントコミュ「Fascinate」が解放できるようになりました! \nコミュは思い出の鍵を使うことで解放できます! \nイベントに参加できなかったプロデューサーさんも楽しんでくださいね!\n#デレステ https://t.co/mvuJRNcU7D'),
     Status(ID=1115860708024037376, ScreenName=imascg_stage, Created=Wed Apr 10 06:14:59 +0000 2019, Text='2曲目は姫川友紀ちゃんがカバーする「LIFE」です!\n\nアイドルたちの新しい曲を、ぜひLIVEで遊んでみてくださいね!\n\nhttps://t.co/mIoEjCkfAw #デレステ https://t.co/0BYaZD0s4c'),
     Status(ID=1115860516755464193, ScreenName=imascg_stage, Created=Wed Apr 10 06:14:13 +0000 2019, Text='サウンドブースに楽曲を2曲追加しました!\nルームのサウンドブースでそれぞれ購入すると、新たにLIVEで遊べるようになりますよ!\n\n1曲目は島村卯月ちゃんが歌う「はにかみdays」です!… https://t.co/OOKKptaeCG'),
     Status(ID=1115860285078822919, ScreenName=imascg_stage, Created=Wed Apr 10 06:13:18 +0000 2019, Text='本日初登場のアイドル、辻野あかりちゃんをご紹介します!\n\nあかりちゃんは山形からりんごのアピールのためやってきた15歳です!\n彼女が本当のアイドルを目指せるように、プロデュース、よろしくお願いします!… https://t.co/Lv7sKzOV6A'),
     Status(ID=1115860017746460673, ScreenName=imascg_stage, Created=Wed Apr 10 06:12:14 +0000 2019, Text='新しいアイドル、辻野あかりちゃんが登場しました!\n今ならログインボーナスでもらえるほか、LIVEやローカルオーディションガシャでも獲得できますよ!\n\n新アイドルは順次登場予定です。お楽しみに!… https://t.co/JZ052LK4dZ'),
     Status(ID=1115599507561967617, ScreenName=imascg_stage, Created=Tue Apr 09 12:57:04 +0000 2019, Text='TVアニメ「シンデレラガールズ劇場」第41話放送中です!\nアニメ放送を記念して、豪華アイテムをプレゼント!\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/RitdcF43jQ'),
     Status(ID=1115498794760556544, ScreenName=imascg_stage, Created=Tue Apr 09 06:16:52 +0000 2019, Text='イベント「LIVE Parade」で先行登場していたアイドルが\nLIVEやローカルオーディションガシャで獲得できるようになりました!\n\n久川凪(CV:立花日菜)\n久川颯(CV:長江里加)\n\nぜひ獲得して、プロデュースしてくださいね… https://t.co/jEeYmbf9Xv'),
     Status(ID=1115497454449844225, ScreenName=imascg_stage, Created=Tue Apr 09 06:11:32 +0000 2019, Text='『シンデレラガールズ劇場わいど☆』第108話が公開されました!\nデレコネからチェックしましょう!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/8CBbAjsKHj'),
     Status(ID=1115497284492349441, ScreenName=imascg_stage, Created=Tue Apr 09 06:10:52 +0000 2019, Text='『みんなで楽しく汗を流すために…今は少し、楽しいだけなのは我慢!』\n\nSSレアの真鍋いつきちゃん登場です!\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/QQ3eSfrKTY')]
tweet = imascg_stage_tl[8]

各ツイートはtwitter.models.Statusクラスで表されます。

type(tweet)

Output:

    twitter.models.Status

 twitter.models.StatusクラスのインスタンスAsDictメソッドにより内容を確認することができます。

tweet.AsDict()

Output:

    {'created_at': 'Thu Apr 11 06:04:21 +0000 2019',
     'favorite_count': 22176,
     'hashtags': [{'text': 'デレステ'}],
     'id': 1116220420082946048,
     'id_str': '1116220420082946048',
     'lang': 'ja',
     'retweet_count': 18974,
     'source': '<a href="http://engagemanager.tribalmedia.co.jp/" rel="nofollow">EngageManager</a>',
     'text': '「第8回シンデレラガール総選挙」を、ソーシャルゲーム「アイドルマスター シンデレラガールズ」との合同で開催いたします!\n開催は4月16日の15時からを予定しています。お気に入りのアイドルに投票しましょう!\n#デレステ… https://t.co/uzJ596Bp6N',
     'truncated': True,
     'urls': [{'expanded_url': 'https://twitter.com/i/web/status/1116220420082946048',
       'url': 'https://t.co/uzJ596Bp6N'}],
     'user': {'created_at': 'Tue May 19 09:34:46 +0000 2015',
      'description': '「アイドルマスター シンデレラガールズ スターライトステージ」公式アカウントです。※お客様からの個別のメッセージなどは、Twitter上ではご返答できかねますのでご了承下さい。 #デレステ Android:http://t.co/PfCtF9Biv4       iOS:http://t.co/0zb47ZumGb',
      'followers_count': 918551,
      'following': True,
      'friends_count': 8,
      'id': 3220191374,
      'id_str': '3220191374',
      'lang': 'ja',
      'listed_count': 10041,
      'name': 'スターライトステージ',
      'profile_background_color': '000000',
      'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png',
      'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png',
      'profile_banner_url': 'https://pbs.twimg.com/profile_banners/3220191374/1535901092',
      'profile_image_url': 'http://pbs.twimg.com/profile_images/875515457364557825/zzJa2735_normal.jpg',
      'profile_image_url_https': 'https://pbs.twimg.com/profile_images/875515457364557825/zzJa2735_normal.jpg',
      'profile_link_color': '89C9FA',
      'profile_sidebar_border_color': '000000',
      'profile_sidebar_fill_color': '000000',
      'profile_text_color': '000000',
      'screen_name': 'imascg_stage',
      'statuses_count': 2409,
      'url': 'http://t.co/7REykaZIlX',
      'verified': True},
     'user_mentions': []}

 twitter.models.Statusクラスのインスタンスも、ここで確認したキーと同じ名前のアトリビュートを参照することで各情報にアクセスできます。例えば、ツイートの内容を得るにはtextアトリビュートを参照します。

tweet.text

Output:

    '「第8回シンデレラガール総選挙」を、ソーシャルゲーム「アイドルマスター シンデレラガールズ」との合同で開催いたします!\n開催は4月16日の15時からを予定しています。お気に入りのアイドルに投票しましょう!\n#デレステ… https://t.co/uzJ596Bp6N'

 api.GetUserTimelineメソッドにはほかにもいくつか引数があります。以下がapi.GetUserTimelineの説明になります。

api.GetUserTimeline??(クリックするとapi.GetUserTimelineの説明が見られます)

Signature:
api.GetUserTimeline(
    user_id=None,
    screen_name=None,
    since_id=None,
    max_id=None,
    count=None,
    include_rts=True,
    trim_user=False,
    exclude_replies=False,
)
Source:   
    def GetUserTimeline(self,
                        user_id=None,
                        screen_name=None,
                        since_id=None,
                        max_id=None,
                        count=None,
                        include_rts=True,
                        trim_user=False,
                        exclude_replies=False):
        """Fetch the sequence of public Status messages for a single user.

        The twitter.Api instance must be authenticated if the user is private.

        Args:
          user_id (int, optional):
            Specifies the ID of the user for whom to return the
            user_timeline. Helpful for disambiguating when a valid user ID
            is also a valid screen name.
          screen_name (str, optional):
            Specifies the screen name of the user for whom to return the
            user_timeline. Helpful for disambiguating when a valid screen
            name is also a user ID.
          since_id (int, optional):
            Returns results with an ID greater than (that is, more recent
            than) the specified ID. There are limits to the number of
            Tweets which can be accessed through the API. If the limit of
            Tweets has occurred since the since_id, the since_id will be
            forced to the oldest ID available.
          max_id (int, optional):
            Returns only statuses with an ID less than (that is, older
            than) or equal to the specified ID.
          count (int, optional):
            Specifies the number of statuses to retrieve. May not be
            greater than 200.
          include_rts (bool, optional):
            If True, the timeline will contain native retweets (if they
            exist) in addition to the standard stream of tweets.
          trim_user (bool, optional):
            If True, statuses will only contain the numerical user ID only.
            Otherwise a full user object will be returned for each status.
          exclude_replies (bool, optional)
            If True, this will prevent replies from appearing in the returned
            timeline. Using exclude_replies with the count parameter will mean you
            will receive up-to count tweets - this is because the count parameter
            retrieves that many tweets before filtering out retweets and replies.
            This parameter is only supported for JSON and XML responses.

        Returns:
          A sequence of Status instances, one for each message up to count
        """
        url = '%s/statuses/user_timeline.json' % (self.base_url)
        parameters = {}

        if user_id:
            parameters['user_id'] = enf_type('user_id', int, user_id)
        elif screen_name:
            parameters['screen_name'] = screen_name
        if since_id:
            parameters['since_id'] = enf_type('since_id', int, since_id)
        if max_id:
            parameters['max_id'] = enf_type('max_id', int, max_id)
        if count:
            parameters['count'] = enf_type('count', int, count)

        parameters['include_rts'] = enf_type('include_rts', bool, include_rts)
        parameters['trim_user'] = enf_type('trim_user', bool, trim_user)
        parameters['exclude_replies'] = enf_type('exclude_replies', bool, exclude_replies)

        resp = self._RequestUrl(url, 'GET', data=parameters)
        data = self._ParseAndCheckTwitter(resp.content.decode('utf-8'))

        return [Status.NewFromJsonDict(x) for x in data]
File:      c:\users\hoge\anaconda3\lib\site-packages\twitter\api.py
Type:      method

 例えば、取得するツイートの数を変更するにはcount引数を設定します。デフォルトだと20ツイートを取得します。最大値は200になっているようです。以下は、200ツイートを取得した例です。

imascg_stage_tl = api.GetUserTimeline(user_id=3220191374, count=200)
len(imascg_stage_tl)

Output:

    200
imascg_stage_tl

Output:

    [Status(ID=1116658954640035842, ScreenName=imascg_stage, Created=Fri Apr 12 11:06:55 +0000 2019, Text='RT @cycomi: 【#放課後スタジオ キャンペーン!】\n\n「アイドルマスター シンデレラガールズ U149 放課後スタジオ」を聴くとU149パーカーが抽選で当たるキャンペーンがスタート!\n\n応募締切は【5/13 12時】まで!\n詳細はこちらから⇒https://t.co/…'),
     Status(ID=1116588012937170944, ScreenName=imascg_stage, Created=Fri Apr 12 06:25:02 +0000 2019, Text='営業コミュを追加しました!\n新しい営業コミュは以下の4話です!\n\nアイドル体操で体健やかに!\n希望を歌う少女・異世界編\n旅の醍醐味は星への道のり\nフィッシングだよ!L.F.B.G\n#デレステ https://t.co/qiwP1Q10Ra'),
     Status(ID=1116587652227035137, ScreenName=imascg_stage, Created=Fri Apr 12 06:23:36 +0000 2019, Text='『シンデレラガールズ劇場わいど☆』第109話が公開されました!\nデレコネからチェックしましょう!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/tQOXlKxZAC'),

         ################ 略 ################

     Status(ID=1088680815876222977, ScreenName=imascg_stage, Created=Fri Jan 25 06:11:47 +0000 2019, Text='アイドルトピックスを追加しました!\nローディング中に現れる1コマ劇場とウワサを探してみてくださいね!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/vImlUw35B2'),
     Status(ID=1088680588335243264, ScreenName=imascg_stage, Created=Fri Jan 25 06:10:53 +0000 2019, Text='『この風…。来たな、冬将軍!このポジパが相手になってしんぜよう!』\n\nSSレアの本田未央ちゃん登場です!\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/SiS7zunKmx'),
     Status(ID=1088680313264365569, ScreenName=imascg_stage, Created=Fri Jan 25 06:09:48 +0000 2019, Text='新しいプラチナオーディションガシャ開催です!\n今回の新アイドルは以下の2人です!\n\n本田未央(SSレア)CV:原紗友里\n間中美里(Sレア)\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/xUln7hDsap'),
     Status(ID=1087657671220617216, ScreenName=imascg_stage, Created=Tue Jan 22 10:26:11 +0000 2019, Text='RT @imas_columbia: 【明日発売‼️】\n\n1月23日発売\nTHE IDOLM@STER CINDERELLA GIRLS STARLIGHT MASTER 25 Happy New Yeah!\n\n歌:島村卯月、渋谷凛、本田未央、\n佐藤心、三村かな子\nCOCC-1…')]

 他にも、since_idmax_idを指定すれば特定の期間のツイートが取得でき、include_rtsを指定すればリツイート含める含めないが指定できるようです。以下では、IDが1087657671220617216以前かつリツーイトではない20ツイートを取得してみました。

imascg_stage_tl = api.GetUserTimeline(user_id=3220191374, max_id=1087657671220617216, include_rts=False)
imascg_stage_tl

Output:

    [Status(ID=1087593162107830275, ScreenName=imascg_stage, Created=Tue Jan 22 06:09:51 +0000 2019, Text='『シンデレラガールズ劇場わいど☆』第83話が公開されました!\nデレコネからチェックしましょう!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/gk6TyMtGXQ'),
     Status(ID=1087592985410195456, ScreenName=imascg_stage, Created=Tue Jan 22 06:09:08 +0000 2019, Text='アイドル3人のメモリアルコミュを追加しました!\nアイドルのファンを増やして、新たな活躍へ導いてくださいね!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/XhE2YjgTrY'),
     Status(ID=1087592780489154560, ScreenName=imascg_stage, Created=Tue Jan 22 06:08:20 +0000 2019, Text='『びゅーん♪一輪車でも徒競走でも、クラスの男子にだって負けないんだよ』\n\nSSレアの福山舞ちゃん登場です!\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/hgaEqZEzbk'),
     Status(ID=1087592612343644160, ScreenName=imascg_stage, Created=Tue Jan 22 06:07:39 +0000 2019, Text='新しいプラチナオーディションガシャ開催です!\n今回の新アイドルは以下の2人です!\n\n福山舞(SSレア)\nケイト(Sレア)\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/XDYHOLbdgT'),
     Status(ID=1087555449241559040, ScreenName=imascg_stage, Created=Tue Jan 22 03:39:59 +0000 2019, Text='【アプリバージョンアップのお知らせ】\nVer.4.5.5をリリースしました。\n詳細はアプリ内お知らせをご確認ください。\n1月24日 12:00に強制アップデートを実施予定です。\nhttps://t.co/mIoEjCBQs4 #デレステ'),
     Status(ID=1087232207037509632, ScreenName=imascg_stage, Created=Mon Jan 21 06:15:32 +0000 2019, Text='『シンデレラガールズ劇場わいど☆』第82話が公開されました!\nデレコネからチェックしましょう!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/koYY3Z75Bd'),
     Status(ID=1087231994730147842, ScreenName=imascg_stage, Created=Mon Jan 21 06:14:41 +0000 2019, Text='イベント「スパイスパラダイス」開始です!\n「ポジティブパッション」の三人が活躍する限定ストーリーを楽しんでくださいね!\n<イベント限定アイドル>\n高森藍子(Sレア)\n日野茜(Sレア)\n#デレステ https://t.co/tzYb4CgPLS'),
     Status(ID=1087192035423969280, ScreenName=imascg_stage, Created=Mon Jan 21 03:35:54 +0000 2019, Text='【1/21(月)メンテナンス終了のお知らせ】\n本メンテナンスは、12:30に終了いたしました。\n\nメンテナンス直後はアクセスが集中しゲームに接続しづらい場合があります。\nゲームに接続しづらい現象が発生している場合、時間をおいて再度ログインをお試しください。\n#デレステ'),
     Status(ID=1087183416506834944, ScreenName=imascg_stage, Created=Mon Jan 21 03:01:40 +0000 2019, Text='【1/21(月)メンテナンス開始のお知らせ】\n現在メンテナンスを実施しております。\n\n■メンテナンス終了時間(予定)\n1/21(月)12:30\n#デレステ'),
     Status(ID=1087154822174760960, ScreenName=imascg_stage, Created=Mon Jan 21 01:08:02 +0000 2019, Text='本日12:00よりメンテナンスを行います!\nメンテナンス中はゲームをプレイできなくなります。\nメンテナンス中に受け取り期限を過ぎたプレゼントは受け取れなくなってしまいますので気を付けてくださいね!\n#デレステ'),
     Status(ID=1086144519265865728, ScreenName=imascg_stage, Created=Fri Jan 18 06:13:27 +0000 2019, Text='『シンデレラガールズ劇場わいど☆』第81話が公開されました!\nデレコネからチェックしましょう!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/Qn8o1pGPyq'),
     Status(ID=1086144251921031169, ScreenName=imascg_stage, Created=Fri Jan 18 06:12:23 +0000 2019, Text='期間限定イベント「スパイスパラダイス」の開催が決定しました!\n今回は藍子ちゃん、茜ちゃん、未央ちゃんのユニット「ポジティブパッション」の新曲がデレステに登場です!\nホーム左下のバナーからメッセージを聴いてくださいね!\n1月21日1… https://t.co/QR3a06Wkhu'),
     Status(ID=1086143075133476865, ScreenName=imascg_stage, Created=Fri Jan 18 06:07:43 +0000 2019, Text='『食レポの練習?…ラーメンってかんじの味!ダメ?紗枝はん、パース』\n\nSSレアの塩見周子ちゃん登場です!\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/pvz1zWi9Q0'),
     Status(ID=1086142895155863552, ScreenName=imascg_stage, Created=Fri Jan 18 06:07:00 +0000 2019, Text='新しいプラチナオーディションガシャ開催です!\n今回の新アイドルは以下の2人です!\n\n塩見周子(SSレア)CV:ルゥ ティン\n北川真尋(Sレア)\n\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/XH9eImnxUQ'),
     Status(ID=1086086666618494979, ScreenName=imascg_stage, Created=Fri Jan 18 02:23:34 +0000 2019, Text='【コラボルームアイテムについて】\n1月17日に放送されたニコニコ生放送「デレステNIGHT★×25」にて、渋谷凛役・福原綾香さんが提案されたルームアイテム「顔ハメパネル」の制作が決定しました!\nルームアイテムへの追加をお待ちくださ… https://t.co/IkC0kOkvi8'),
     Status(ID=1085417666049904640, ScreenName=imascg_stage, Created=Wed Jan 16 06:05:12 +0000 2019, Text='「新春!プラチナ宝くじ」当選結果発表中です!\n何が当たったか確認しに行きましょう!\n※2月6日までの当選結果発表期間内に宝くじ特設ページへアクセスしなかった場合、景品を受け取れなくなります。\n#デレステ https://t.co/NfpYYjrhNc'),
     Status(ID=1085355150519091200, ScreenName=imascg_stage, Created=Wed Jan 16 01:56:47 +0000 2019, Text='1月16日10:30ごろに本来とは異なるタイミングでプッシュ通知が送信されておりました。\n\n<誤って送信された内容>\n「新春!プラチナ宝くじ」当選結果発表中!何が当たったか確認してみましょう!\n\n当選結果発表は予告しております通り… https://t.co/FEzv2R3hgt'),
     Status(ID=1085061895478898689, ScreenName=imascg_stage, Created=Tue Jan 15 06:31:30 +0000 2019, Text='デレステお正月CPへのご参加ありがとうございました!\n感謝の気持ちを込めて、日替わりで登場してくれたアイドルたちのおみくじをまとめてお届けします!\nタップして今年1年の運勢を占ってみてくださいね!\n#2019年もレッツ・デレステ… https://t.co/Tmo0mhKgWl'),
     Status(ID=1085056270271373312, ScreenName=imascg_stage, Created=Tue Jan 15 06:09:08 +0000 2019, Text='『シンデレラガールズ劇場わいど☆』第80話が公開されました!\nデレコネからチェックしましょう!\nhttps://t.co/mIoEjCBQs4 #デレステ https://t.co/QSHmadJjvN')]

ユーザーをフォローする

 ユーザーをフォローする方法を紹介します。これにはapi.CreateFriendshipを使います。api.CreateFriendshipメソッドも、フォローしたいユーザーの名前かIDを渡すことでユーザーをフォローすることができます。

imascg_stage_tl = api.CreateFriendship(screen_name='imascg_stage')

実行すると、フォローしたユーザーのtwitter.model.Userクラスインスタンスが返ってきます。

imascg_stage_tl.AsDict()

Output

    {'created_at': 'Tue May 19 09:34:46 +0000 2015',
     'description': '「アイドルマスター シンデレラガールズ スターライトステージ」公式アカウントです。※お客様からの個別のメッセージなどは、Twitter上ではご返答できかねますのでご了承下さい。 #デレステ Android:http://t.co/PfCtF9Biv4       iOS:http://t.co/0zb47ZumGb',
     'followers_count': 918551,
     'friends_count': 8,
     'id': 3220191374,
     'id_str': '3220191374',
     'lang': 'ja',
     'listed_count': 10040,
     'name': 'スターライトステージ',
     'profile_background_color': '000000',
     'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png',
     'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png',
     'profile_banner_url': 'https://pbs.twimg.com/profile_banners/3220191374/1535901092',
     'profile_image_url': 'http://pbs.twimg.com/profile_images/875515457364557825/zzJa2735_normal.jpg',
     'profile_image_url_https': 'https://pbs.twimg.com/profile_images/875515457364557825/zzJa2735_normal.jpg',
     'profile_link_color': '89C9FA',
     'profile_sidebar_border_color': '000000',
     'profile_sidebar_fill_color': '000000',
     'profile_text_color': '000000',
     'screen_name': 'imascg_stage',
     'status': {'created_at': 'Fri Apr 12 11:06:55 +0000 2019',
      'hashtags': [{'text': '放課後スタジオ'}],
      'id': 1116658954640035842,
      'id_str': '1116658954640035842',
      'lang': 'ja',
      'retweet_count': 430,
      'retweeted_status': {'created_at': 'Fri Apr 05 16:25:58 +0000 2019',
       'favorite_count': 858,
       'hashtags': [{'text': '放課後スタジオ'}],
       'id': 1114202530177622016,
       'id_str': '1114202530177622016',
       'lang': 'ja',
       'retweet_count': 430,
       'source': '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>',
       'text': '【#放課後スタジオ キャンペーン!】\n\n「アイドルマスター シンデレラガールズ U149 放課後スタジオ」を聴くとU149パーカーが抽選で当たるキャンペーンがスタート!\n\n応募締切は【5/13 12時】まで!\n詳細はこちらから⇒… https://t.co/r35dQuZ5yR',
       'truncated': True,
       'urls': [{'expanded_url': 'https://twitter.com/i/web/status/1114202530177622016',
         'url': 'https://t.co/r35dQuZ5yR'}],
       'user_mentions': []},
      'source': '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
      'text': 'RT @cycomi: 【#放課後スタジオ キャンペーン!】\n\n「アイドルマスター シンデレラガールズ U149 放課後スタジオ」を聴くとU149パーカーが抽選で当たるキャンペーンがスタート!\n\n応募締切は【5/13 12時】まで!\n詳細はこちらから⇒https://t.co/…',
      'urls': [],
      'user_mentions': [{'id': 4023021733,
        'id_str': '4023021733',
        'name': 'サイコミ',
        'screen_name': 'cycomi'}]},
     'statuses_count': 2409,
     'url': 'http://t.co/7REykaZIlX',
     'verified': True}

終わりに

 幾つかのメソッドを例にしてpython-twitterモジュールの使い方を紹介してみました。まだまだ紹介できていないメソッドや引数がありますが、この記事を読めば大体の使い方が推測できるのではないでしょうか。僕自身、pythonもネットワークもわからないことだらけでドキュメントを読んでも理解できない箇所が多々ありました。そのような箇所については、今後、理解出来次第追記して説明できればいいかなと思っています。ここまで読んでいただきありがとうございました。