27
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

エニプラAdvent Calendar 2022

Day 1

TwitterAPIを使ってランダムな固定文をツイートさせた話

Posted at

1.作成の経緯

きっかけは、知人から
「Twitterって更新しないと埋もれちゃうけど、ツイートするのもめんどうなんだよねぇ…
なんか、自動でツイートできるようなもの作ってよ」
そんな内容のDMが届いたところから始まりました。
(そんなん言うならTwitterやめちまえ)

当初は断ろうと思っていたのですが、知人のために作ってみることにしました
(アドベントカレンダーもあるからしゃーなし、って訳ではないです。)

2.環境

・vscode Version 1.73.1

・Python 3.11.0

3.実際のソースとか

以下、自分が実際に作成したソースです。

tweet.py(メインのソースです)

from requests_oauthlib import OAuth1Session
import json, config #標準のjsonモジュールとconfig.pyの読み込み
from requests_oauthlib import OAuth1Session #OAuthのライブラリの読み込み
import xml.etree.ElementTree as ET 
import random
import math

CK = config.consumer_key
CS = config.consumer_secret
AT = config.access_token
ATS = config.access_token_secret
twitter = OAuth1Session(CK, CS, AT, ATS) #認証処理

url_media = "https://upload.twitter.com/1.1/media/upload.json"
url_text = "https://api.twitter.com/1.1/statuses/update.json"

tree = ET.parse('test.xml') 
root = tree.getroot()
count = math.floor(random.uniform(0, 1))

# 画像投稿
files = {"media" : open(root[count][1].text, 'rb')}
req_media = twitter.post(url_media, files = files)

# レスポンスを確認
if req_media.status_code != 200:
    print ("画像アップデート失敗: %s", req_media.text)
    exit()

# Media ID を取得
media_id = json.loads(req_media.text)['media_id']

# Media ID を付加してテキストを投稿
params = {'status': root[count][0].text, "media_ids": [media_id]}
req_media = twitter.post(url_text, params = params)

# tweetできたか確認
if req_media.status_code != 200:
    print ("テキストアップデート失敗: %s", req_media.text)
    exit()

print ("OK")

config.py(Keyやらtokenを記載しておく)

consumer_key        = 'XXXXXXXXXXXXXX'
consumer_secret     = 'XXXXXXXXXXXXXX'
access_token        = 'XXXXXXXXXXXXXX'
access_token_secret = 'XXXXXXXXXXXXXX'

XXXXXXXXXXXXXXの中身はご自身のTwitterAPIで取得した値を入れてください。
取得する方法はこちらのサイトを見ていただくのが一番良いかと思われます。

test.xml(実際のツイートの中身などを記載しておく)

<?xml version="1.0" encoding="UTF-8" ?>
<tweets>
  <tweet>
    <text>testSD</text>
    <image>thumbnail_computer_sdcard.jpg</image>
  </tweet>
  <tweet>
    <text>testPC</text>
    <image>computer_case.png</image>
  </tweet>
</tweets>

以上です。

プログラミングをしたことが無い方向けに、すっっっごく簡単に説明すると、
「config.pyからKeyとかを取得して、それらを使って認証してね」って言うことと、
「test.xmlから(ランダムな数字)番目のデータをとってきてね」ってことをしています。

(多少のプログラミングの知識があれば調べながら読めると思うので、経験者の方向けの解説はしません。)

4.実際に実行した結果

スクリーンショット 2022-11-27 191125.png
上記に記載されたソースをそのまま実行するとこのような形で表示されます。
(「いらすとや」さん、いつもお世話になっております!!)

今後の展望とか

今回、テスト用に作ったものなので、XMLファイルの中身が非常に簡素なものになってしまっています。
しかし、これらを少し変えてあげれば会社やお店の宣伝など、様々なものに利用できると思われます。
今後は知人にテストをしてもらいつつ、もう少し発展させたい所存です。

…Twitterで特定のタグを付けつつ口コミを書いてもらい、そのタグを取得条件にしてツイートを収集。
その結果をXMLファイルとして書き出せれば…
的なことも考えているので、来年の私に乞うご期待くださいませ。
(来年記事にするかわかりませんが…)

本記事は以上となります
ここまでお読みいただきありがとうございました。
質問、コメント等ありましたら、お気軽にどうぞ

27
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?