【リアイム】


タップ(クリック)で消す



よみこみ中…








閉じる
もくじ

リアイム

アウトプット&知識の共有

【tweepy】 Twitterで自動ツイートをする コピペ可能! トレンドを取得する最新方法 Twitter API

f:id:a1t2s2u2:20220106151420p:plain

ブログ記事の宣伝を行う際にTwitterを活用していますが、これを自動化できたら便利ですよね。実はpythonTwitterAPIを使うとこれが可能になります。

APIとは?

f:id:a1t2s2u2:20220106150903j:plain

あるサービスの機能を使いたい時に、プログラムをつなぐことのできる仕組みだと考えて大丈夫です。


Twitter APIでは

  • 自動ツイート
  • トレンド取得
  • ツイートの分析

など、本当にたくさんのことができます。


自分の用途に合わせてプログラムを作ることができるので、botを作っている方もいますよね。この記事ではコピペ実行可能ですので、是非試して見ましょう。


ちなみに、僕が初めてAPIと出会ったのは「高校生エンジニア体験」でした。

その時の体験談はこちら ↓↓↓
riaimu.hateblo.jp



APIを利用するにはデベロッパー登録が必要な場合があります。

Twitterだと審査があり、使用目的などを英語で提出しなければいけません。その後、Access tokenやAPI Keyなどを取得します。

コードを実行する際には自分のコードを代入してください。




実際に作ってみよう

f:id:a1t2s2u2:20220106150756p:plain

tweepyを利用するにはライブラリをインストールをする必要があります。ターミナル(コマンドプロンプト)から以下のコマンドを実行しましょう

pip install tweepy
# python3はこちら
pip3 install tweepy


ツイートをする

f:id:a1t2s2u2:20220106150739j:plain

import tweepy

consumer_key = "取得したもの"
consumer_secret = "取得したもの"
access_token = "取得したもの"
access_token_secret = "取得したもの"

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

api.update_status("こんにちは from python")

consumer_key, consumer_secret, access_token, access_token_secretなどは自分のデベロッパーサイトから取得したものをコピペしましょう。

注意点として、取得の際にI saved themボタンを押さないと反映されない可能性があります。


こんにちは from pythonという投稿をすることができます。



【 実際のツイート 】






また、複数行のツイートをするには次のような操作が必要です。contentsに各行ごとに文字列を入れましょう。

# 複数行ツイート
contents = [
    '一行目です。',
    '二行目はこちら!',
    'これは記事用の投稿なので気にしないでください。',
    'pythonからの投稿です。',
    '#プログラミング #ブログ #はてなブログ',
]
content = '\n'.join(contents)
api.update_status(content)


【 実際のツイート 】

もちろん、ハッシュタグも可能です。



注意

同じ内容の投稿を続けて行うと
tweepy.errors.Forbidden: 403 Forbidden
187 - Status is a duplicate.

というエラーが発生します。
直訳すると、

187 - ステータスが重複しています。

という意味で、同じ内容の投稿をするんじゃねぇよ!と言われています。現在の時刻を付け加えたり、乱数を文字列として追加することで回避できます。




ツイートができるだけでとても楽しいですよね。


しかし、これからが本番です。



ツイートを消す

f:id:a1t2s2u2:20220106150706j:plain


自動で毎回投稿していたら
ツイートで溢れてしまうじゃないか!



その通りです。

対策としてツイートのidを取得さえすれば、次のようなコードで投稿したツイートを削除することができます。

new_id = api.update_status("こんにちは from python").id
print(new_id)
api.destroy_status(new_id)


実行結果がないので悲しいですが、取得したidは1478955428910616580でした。設定すると、数分後に削除ができちゃうのでとても便利ですね。



ちなみにこれまでのツイート全てを削除することもできるみたいですが、実験をしたくないのでやめておきます…


トレンドの取得

f:id:a1t2s2u2:20220106150639j:plain

指定した世界中のトレンドを取得することができます。

指定にはこちらのサイトを参考にしてください。
WOEID – Muftsabazaar




woeid = {
    "日本" : 23424856,
    "New York" : 2459115,
    "London" : 44418,
}
trends = {}
for area, wid in woeid.items():
    array = []
    for i, trend in enumerate( api.get_place_trends(wid)[0]["trends"] ):
        if i > 3:
            break
        array.append(trend['name'])
    trends[area] = array
print(trends)

全てのトレンドを取得すると、表示結果が長くなってしまうので、今回は数を限定しています。



【 実行結果 】

{
    '日本': 
        ['雪だるま', '大雪注意報', 'ワグネリアン', 'スタッドレス'], 
    'New York': 
        ['Boeheim', 'Miami', '#sjubb', 'Nash'],
    'London': 
        ['#AEWDynamite', '#CheTot', '#PMQs', 'Djokovic']
}

(実行日:1月6日)
※ インデントをして見やすくしています。


うまく取得できましたね。


日本では冬って感じ。
ワグネリアンは馬の名前みたいです。



取得したトレンドをツイート内容に含めることで、より多くのユーザーにツイートを見てもらうことができます。


tweepyでトレンド取得ができない

f:id:a1t2s2u2:20211212134725j:plain

余談かもしれませんが、「tweepy トレンド取得」と検索すると同じようなコードがたくさん出てきますが、どれもエラーが起きてしまうのです。

AttributeError: 'API' object has no attribute 'trends_place'


2021年08月13日に更新された検索1位の記事でも誤ったコードが掲載されていたことで、APIのドキュメントを読むことの大切さがわかりました。



全然トレンド取得できなかったので、英語のサイトをたくさん読みましたが、どれも情報が古かったようでした。


仕方ない。ドキュメントを読むか。


そうして見てみるとtrends_placeではなく、get_place_trendsを使う必要がありました。これが独学の挫折する理由だと思います…
ネットは全て正しい訳ではないので常に疑いましょう。

# エラーが起きる
api.trends_place(wid)[0]["trends"] )
# 正解
api.get_place_trends(wid)[0]["trends"] )


参考記事:
https://qiita.com/tomo045/items/4274693eb53e205d8be6

ここで参考記事として被リンク獲得させてしまうと、より一層検索エンジン上位になってしまい、多くの方が間違えてしまうと思うので、文字列としてご紹介しています。



連続自動投稿

f:id:a1t2s2u2:20220106150941j:plain

ある一定の期間を決めて自動でツイートをするbotのようなプログラムを実装してみます。


基本的な操作は先ほどのツイートと変わりませんが、他のライブラリと組み合わせることでどのようなことができるのかを知って見ましょう。

import random
import time

while True:
    # ランダムの数字を投稿
    new_id = api.update_status(str( random.randint(1,10000) )).id
    # 20秒休憩
    time.sleep(20)
    # 削除
    api.destroy_status(new_id)



randomで乱数を生成して、timeで20秒間休憩してから投稿したツイートを削除します。これで乱数でアカウントが飲み込まれる事を阻止できますね。




【 実際のツイート】


なんか、宝くじbotとか作れそうですね笑




はてなブログの自動記事紹介

f:id:a1t2s2u2:20211228152058j:plain

これ本当に便利です。

Twitterでブログの記事をよく宣伝しているのですが、手動だと大変ですし、全ての時間帯に対応することができません。


そこで、tweepyを用いた自動記事紹介プログラムを完成させました。これ有料にしても売れるんじゃないかというくらい便利です!



記事情報の取得

f:id:a1t2s2u2:20220101225137j:plain

はてなブログではドメイン+rssというURLで自分の記事の情報を見ることができます。例えばこのブログでは[https://riaimu.hateblo.jp/rss]で見ることができます。詳しくは解説しませんが、xmlファイルですね。


このファイルをダウンロードしてローカル環境に保存してください。URLのまま実行するとエラーが生じてしまう可能性があるためです。



今回はそのファイル名をarticle.xmlとしましょう。



わかりやすくするため、まずは取得のみを行いましょう。

import feedparser

url = "article.xmlのパス"
dic = feedparser.parse(url)

for entry in dic['entries']:
    print('title :', entry['title'])
    print('link :', entry['link'])
    # タグがあれば取得する
    if "tags" in entry.keys():
        tags = []
        # タグの追加
        for tag in entry['tags']:
            tags.append( tag['term'])
        print('tags :', tags)


【 実行結果 】

※ スクロールできます。


このように記事の情報を取得することができます。
他にも投稿日時などたくさんの情報を取得できますが、dic.keys()でどんな情報がみれるのかを取得して見ましょう。




実は全ての記事は取得できませんでした…
rssには約30記事程しかデータがなかったのです。現在、はてなブログの運営様にお問合せしているところなので、解決したら記事を修正しようと思います。



tweepyに応用する

f:id:a1t2s2u2:20220102193104j:plain

取得できた値をツイートするだけで自動紹介プログラムは完成しますね。僕の場合は指定した時間間隔で記事紹介をし、その後削除する事を繰り返します。また、記事のタグも併せてツイートするため、ターゲット層に向けて紹介ができました。


プログラムはご自由に組んでください。


僕のプログラムは見づらいと思うので今回は掲載しませんが、実行結果などはTwitterを見るとわかると思います。




記事を読んでいただきありがとうございます。
このプログラムのおかげでいつもより多くの方にブログへ訪れていただけました。無料で広告のできるSNSを自動化するって本当に便利ですよね。
わからないことなどがあれば遠慮なく質問してくださいね!Twitterだと返信が早いと思います。



【 おすすめ記事 】
riaimu.hateblo.jp
riaimu.hateblo.jp
riaimu.hateblo.jp







記事の内容に間違いがあった場合は、Twitterもしくはお問い合わせフォームからお伝えください。