Gift history
Please access after login.


Wait a moment...

【サンプルコード付き】Twitterに画像付きツイートを自動投稿する【Python】

695
0
2021-10-13 19:23:42
51000 mXYM
(2)


はじめまして&いつもありがとうございます、えすくまくん(の中の人)です🐻
今更ですがハンドルネームはりょーちゃんです。気軽にりょーちゃんと呼んでください、すぐ懐きます。
今日これだけは覚えて帰ってください、よろしくお願いします。


絶賛稼働中のえすくまくんシステムでは毎日朝/夜9時に仮想通貨Symbol(XYM)の価格を画像付きでお届けしておりますが、これを毎日手作業でやるとなると...それはもうとんでもなく大変で長く続けていられません。想像しただけで眩暈がしそうです🙄ヒィン
プロ野球選手のほぼ100%が毎日睡眠をとっているように、ITエンジニアのほぼ100%が「面倒なことはプログラムにやらせたい」と日々悶々としています

そこで今回は "めんどくさがりだけどやることはやりたい" 、そんなずぼらストイック志向なあなたへTwitterへ画像付きツイートを自動投稿する仕組みについてサンプルコードを交えつつご紹介していきます。



Twitter APIの利用申請

自動投稿するbotを作成したかったのでTwitterAPIの申請を行いました。
いきなりですがここが最難関です内容もさることながら延々と英語を読み進めるのが心理的にかなり重たいです。
効率の良い英語学習について知見をお持ちの方はコメント欄でご教示頂けますと幸いです。

申請方法はこちらの記事でとても丁寧に解説してくださっているので参考までに。
【2021年版】TwitterAPIの申請・APIキー発行方法!ツイッターボット作成に必要な手順を解説

---------------------------------------------------
特にしんどいのは利用目的等を記入するステップです。
下記4点について回答していきます(各200字以上)。使わない項目について記入する必要はありません。

1. Are you planning to analyze Twitter data?
(ツイッターのデータを分析する計画はありますか?)

2. Will you app use Tweet Retweet, Like, Follow, or Direct Message functionality?
(あなたのアプリはツイートやリツイート、いいね、フォロー、DM機能を使用しますか?)

3. Do you plan to display Tweets or aggregate data about Twitter content outside Twitter?
(Twitter以外のTwitterコンテンツに関するツイートや集計データを表示する予定はありますか?)

4. Will your product, service, or analysis make Twitter content or derived information available to a government entity?
(あなたの製品・サービス・分析によって、ツイッターのコンテンツや派生情報を政府機関が利用するようになりますか?)

えすくまくんシステムではとりあえすツイートができればよかったので2. のみ回答しました。



さらにその後Twitter本社からAPI利用に関する詳細確認メールが届くのでこちらにも返信します。回答は実際に私が返信した内容です。

・If your use involves Tweeting, Retweeting, or liking content, share how you will interact with Twitter users or their content.
(ツイート、リツイート、またはコンテンツのいいねを使用する場合は、Twitterユーザーまたはそのコンテンツとどのようにやり取りするかを共有してください。)

回答:
Run the Python script you created with AWS lambda and tweet it. The body of the tweet will be created in the Python script, and the images to be attached to the tweet will be those prepared in Amazon S3 (storage service) beforehand. The parameters required for tweeting, such as API Key and Access token, are scripted to be obtained from AWS Systems Manager (users other than myself will not be able to view each parameter).

「Twitterユーザーまたはそのコンテンツとどのようにやり取りするか」は具体的なシステム処理の部分まで踏み込んだ内容を書くまで納得してもらえませんでした。。

・The core use case, intent, or business purpose for your use of the Twitter APIs.Please note, “business purpose” in this context includes uses not necessarily connected to a commercial business. We require information about the problem, user story, or the overall goal your use of Twitter content is intended to address.
(Twitter APIを使用するための主要なユースケース、意図、またはビジネス目的。この文脈での「ビジネス目的」には、必ずしも商業ビジネスに関連するわけではない用途が含まれることに注意してください。問題、ユーザーストーリー、またはTwitterコンテンツの使用が対処することを目的とした全体的な目標に関する情報が必要です。)

回答:
"To implement a social network posting system using Python". I'm a self-taught coder who recently started learning how to code. I would like to deepen my understanding of Python and APIs by building such a system as part of my learning. The background of the project is just to improve my skills through building the system.

4往復くらいしてようやく納得してもらうことができました。
本当は1. の分析もやるつもりで申請出したのですが、"可能な限り詳細かつ網羅的な説明を提供してください" とのこと。。詳細な設計までは決めていなかったので納得してもらえないだろうなということで一旦諦めました。。

Twitterはポリシー等かなり厳しいのでこの辺りにはきちんと目を通しておきましょう。
 Developer Agreement and Policy
 Automation rules
 The Twitter Rules

メールでの詳細確認を終え無事申請が通ると以下のようなメールが届きます。長かった。。
送られてきたリンクからDeveloper Portalへログインできます。


プロジェクトを作成し、下記4つのパラメータを生成/メモしておきましょう。
・API Key
・API Secret Key
・Access Token
・Access Token Secret



APIキー等の保存/取得

APIキー等をLambda関数のPythonスクリプトにべた書きするのはセキュリティの観点でよろしくないため、各種パラメータはAWS Systems Managerで管理することとしました。
AWSマネジメントコンソールから「Systems Manager」と検索し、パラメータストアから上記4つのパラメータをひとつずつ登録していきます。


「パラメータの作成」から
・名前:登録するパラメータの名前
・利用枠:標準
・タイプ:安全な文字列
・値:Developer Portalで作成したパラメータ



登録後はこのようになります。
※私は別用途で使用するためbearer_tokenを登録していますが、今回のツイートには使用しませんので無視してください。


Pythonスクリプトからパラメータを取得するサンプルはこちら↓

ちなみにCK = Consumer Key、CS = Consumer Secretです。


画像ファイルのbase64変換

添付用に加工した画像はS3に保存しているためそちらから呼び出す方法も考えましたが、Twitterでは画像ファイルとしてうまく表示できないようでした。細かい部分で地味に引っかかりますね。。
Amazon S3に置いた画像ファイルがTwitter, Facebook, Chatwork, Slack, Discordでどう展開されるか試してみた

えすくまくんシステムでは画像投稿手段としてこちらのAPIを採用しました。
使用するパラメータとしてmedia_data(base64エンコードしたもの)を選んだのは単に馴染みがあったからなので、バイナリファイルでも構いません。
base64変換する対象はOpenCVおよびPillowで加工しLambdaの/tmp ディレクトリに格納した画像です。


えすくまくんの画像加工についてはこちらの記事で詳しく解説しております。

【サンプルコード付き】OpenCV+Pillowを利用してAWS Lambdaで画像を加工する(文字入力、色変更、フォント変更)
はじめまして&いつもありがとうございます、えすくまくん(の中の人)です🐻前回えすくまくんシステムで配信中の画像デザインについてご紹介しましたが、今回は実際に画像加工で利用しているPythonライブラリ「OpenCV」「Pillow」について、基本的な使い方やAWS Lambdaで実装する際に躓いた話を中心にお届けします。... 続きを読む


ツイートの作成/投稿

いよいよツイートの作成です。
Twitterオブジェクトを生成し、投稿したい文章と画像を組み込んでいきます。
画像は一度メディア用エンドポイントにアップロードしてmedia_idを取得してからくっつける流れとなります。

※TwitterAPIには v2 というバージョンがありますが、リファレンスをサラッと眺めたところだとこちらはデータ取得や分析用途に比重が寄っているようです。


サンプルコード

えすくまくんシステムで利用しているツイート部分のソースコード(一部加工済)はこちらです。



---------------------------------------------------

最後まで読んできただき、ありがとうございます!
今回はTwitterへ画像付きツイートを自動投稿する仕組みについてサンプルコードを交えてお届けしました。
Systems Managerからパラメータを取得する部分なんかは開発シーンでよく利用されているメジャーなものなので、押さえておくと役立つ機会もありそうです。

TwitterではSymbol(XYM)やプログラミングに関する話題を投稿しています。
ぜひフォローよろしくお願いします!


それではまた!

Writer
コミュニティ発Symbol Walletアプリ【EXYM】を開発しています。 またTwitterで毎日XYM価格を画像でお届けする【えすくまくん】を育てています。 NEMLOGでは主に開発に関するトピックを扱っていきます。 Symbolアドレス:NCJNZYDNJSWKTTOV66F6WOQ76ON2WBS2Q4452NI

Comment
Login required to post comment
Loading...
https://symbol-sakura-16.next-web-technology.com:3001,https://symbol.harvest-monitor.com:3001,https://hideyoshi-node.net:3001,https://harvest-01.symbol.farm:3001,https://criptian-xym-node.net:3001,https://35665.xym.stir-hosyu.com:3001,https://yuna.keshet.finance:3001,https://cryptocat-xym-node.com:3001,https://misaki-xym.com:3001,https://ik1-305-12844.vs.sakura.ne.jp:3001,https://17107.xym.stir-hosyu.com:3001,https://23639.xym.stir-hosyu.com:3001,https://sym-main-01.opening-line.jp:3001,https://sym-main-02.opening-line.jp:3001,https://sym-main-03.opening-line.jp:3001,https://sym-main-04.opening-line.jp:3001,https://sym-main-05.opening-line.jp:3001,https://sym-main-06.opening-line.jp:3001,https://sym-main-07.opening-line.jp:3001,https://sym-main-08.opening-line.jp:3001,https://sym-main-09.opening-line.jp:3001,https://sym-main-10.opening-line.jp:3001,https://symbol-node-01.kokichi.tokyo:3001,https://50038.xym.stir-hosyu.com:3001,https://27423.xym.stir-hosyu.com:3001,https://angel.vistiel-arch.jp:3001,https://xym.stakeme.tokyo:3001,https://00-symbol-node.yagiyoshi.com:3001,
6BED913FA20223F8,051FAEC15105C808,73019335A785A3AE,5289A9B0DBB7EB25,6B245EAF1302E444,2C4A4893229DD0A9,63509D495CAD7B80,481D74291A71FD1F,009388A38C91A8B2,4E94920841641B77,027C6AD49DE2C9F9,29FCA5D3092205EC,56085AD9FCE150AC,7D47EE5423795E68,1FCD7C6B47C7AC5C,34F165131675B97B,2277A3D3C939E3BD,1BEE7E51C52B9E4C,7DE0FA227D5C284A,69C715D2F4E80338,5CF9D768B02E51EA,5B96E6496754C18E,35584939456EE19C,430AB6F115D709C5,202FC8C6762F1286,1DA6F5986C56CAB4,77F0C0918BDDCA75,05D935AB3DBBBDA7,3AB05B7B3373067F,383EEBD409479BDD,282E5F730EEF0F3C,108AFF21E54B77EB,0C4AAE8E82E054FD,18964001EF89D687,15BDE2DDF36FE763,01E2769C92FFB187,427C7F0474B2170B,3F2EEE17968715D5,6C0AFBA20EEBF08B,22975F2097F16D15,2A30D04FF35E8641,03ACEC4F51A71804,5235C4249928922B,2BFEB24F70B91041,741320E728843965,7C4E97850A863208,0586FF7E5ED1C680,606432C50BDE4EB5,15A6AD5E5ED6AC0E,59932634EDBF2A21,5E4F05ED77C64434,71C79278A325FF67,616EC15DE7D641A0,25C2DAB4FE687CBE,3D78B91922741293,5DC4B8DCDC4D3098,2693037B1881D5FA,178FE008F5DCE797,174A93DA9B651FBD,128B2CD071838D3E,1F5630200C5A6025,43449FF761B3DD67,4B20F46C289CA548,35DBA0A70A96615F,78CE44A425CD4514,37179FDE046FE7F2,1739E47C99BAF114,0F3B4A0F2E58703B,3C41561BE3DF7461,2AF0FBFEBF29231F,74CD75720BA4F553,1A5229DC90802C6C,0D2888CD0CBB78EE,2558F02FE439C78F,5DDD07C51EC896A7,437B094116B91BF3,6C9E7CFE33220C8F,38E1C92F412FCA96,2FB263845F59AF82,28C3C38B84138804,659821D4511185A7,7C6095DA82D3E981,70ADA95932385F9F,0BE6C51AD316BF2B,78E6ED1B6C05FD98,39534A8DFD9C0F1E,1BAF1FE1AAF90CD0,6782B8D9162D0C12,5EF22919F6EA15F7,04A3F3F5C088626A,7484B044AC8EF734,305B0ECE763A1E81,08738DB598D0BA37,6F4018163AC51F88,46650CE0C72739A8,0208FCB9186781E5,4E685399C9F8C991,77DB7D348B042A18,578ED7B270B43E64,0B34212023AA5139,479CEDAEE6FAC642,4266458B86437B4B,1F7022D092066B94,0CA28E24CB575AA6,4DCC3C025CDC0BB8,1BD05266C7410EE1,45C46BC710C187AF,7CC2C672543CA102,555BA3719D30D3B9,75C4079CCCCF3E82,66C98D947EAC56FB,1C041AB88A8D222B,79C13E9FE7DA49AB,54D872B5DB378F52,5C97B2414157B039,31E7A64CFF778586,1DFD11EEDA4662C4,18506C180280D8AB,02E95DB8811B3F7A,2D289599AF071703,17EA80052AF590B0,5239AE78AA9011CC,6B6511925501765B,2730974F2D11E9FA,08AB4E53E95E417E,1D0DD379C8C4BA49,26EE7E07E1255FAB,015FABE3F602FA91,366D7D6540335156,2D1E8E73B9F09391,043694AD272BCEBA,064335A213099492,3C40AE05D9758591,71C4BCA24A2FA6C1,20170ABD32244B78,74EBE4C9FD9C3BC8,713583F712D574FA,7C05BBBD486CF544,634D5A328A659C41,2DA0EC8CA32B7CE6,4D0ECC9F6F70D67D,7426EE72B3DFD620,3C3E58B64A8CD43C,5007CF79DF192FB2,1531F39F1B0AA8C3,5D1E928E7902404F,74599424DE012A19,52F96AC0043B02D8,0C694031CFC22C84,03D6EE58174D16DD,054B071E97323D54,2B58942A0A9D3908,7FE10DF86F32776F,1A08F9B88AE4CCF9,03CB7A99E6F6F65A,2F0BAAAD886013B2,7D8FF6C570E909C3,237ACBD2073D7C22,29498519D19B27CF,03E85F9F15A92D27,62B4F899B6DADDFF,6649A6F82740775E,1FA7CAD8017C3045,5FFB7126DD87CC5B,07039874D46F8B44,3391DD8105AD0C82,56C97E544EA9C149,6103DBFFA022249B,41E9771D99FF96A5,65CF7BE26FC7BF56,789063B9FDA7D02B,3EE026A17E4D1895,44B13D3F4EEB8AC9,248AAD9D9E2C1984,0CEDE2DEDDB4832F,5DFE51E2C6617CA4,4FAE3B092339A328,03B7E30D264E586B,3B5B8D2389EEB8C9,0058930348E8DA39,43C44AE173D50661,16E0B9B56763A2A6,43B05E6CCD87A765,33276E3A53106C11,24F35BCEA31E9AFB,49320DB27BA10BF5,01B69528B052EFA3,21C3025E1B2B9D3C,613FFCD9027A73D9,79A5BC34AE8B6314,35BFF98EA19690D4,156CDDD2D6791814,6E4E5A6C8F1ECA31,21BCF4CD26C307FF,15F6E07EAC6D5186,71A24162BA611651,0EDC8542160D8DAA,771BAE5451E881A8,1E47CA21337876B5,7688DC299D77C545,1166391DB32354A4,6A0AF7328EBBE113,38E48122C0FC8BCF,484874B2C669D6E1,4EF142A5D00BDA63,0508049897379E24,50B28C0858AE222C,75F2674CEE45E919,2F0DC3D306469BF9,5A86884742F89C7F,78F0F31776134860,1576EB985E541EA9,17D9C6FCB4FAB2A0,6B2E9EAF2632AEC8,007050CE9F59E77C,5D88028B3A9E633A,554191B46C16E4C4,5A0E1268E65E99F2,41A67647778AEA4D,7EADDBC2119EADA0,3D4235EB6FC9247D,5D25658948613563,5629D816678CF8FC,48A147A7F34C0131,46DF1D828736AFE1,748D83A906C897E4,0708BF363BA9595A,58384D5F0D793C09,531A0934DE43FBAC,1C4EEB7AD6B44AF4,383B57EBD5272C12,41F8077951D07ADF,0F52B4D356FDA824,1FE0805A112A03DF,38E8FFDFCD6510FF,0F65746CB1D7AD53,1E9E3010A1412DDB,7401A59C5DBD66A4,5FDC6383C702EC40,3B97B8CA49739205,