見出し画像

【Webエンジニアの備忘録】Twitter Botのエラーの対処

はじめに


ごあいさつ

ご高覧いただき有難うございます.
ソフトウェアエンジニアのKitaharaです.
今回はTwitter Botでエラーが発生していたので確認したという記事です.

(いつもの記事に比べボリュームは抑えめになっています.)

エラー内容


概要

先日投稿した下記の記事で紹介させていただいたTwitter自動広告アプリをHerokuで運用しているのですが, 先日投稿が出来ていない日があることに気付いたのでエラー内容を確認しました.


詳細

  • 基本投稿はできている

  • 時々投稿できていない日がある (2022/04/08等)

以上をもとにデプロイ先のPaaSであるHerokuのログを調べてみました.


補足: Herokuのログの調べ方

コンソール画面から [More] をクリック

ドロップダウンリストから [View logs] を選択

結論


自分で記事に書いているtry & except文が原因でした.
Tweetの文字数が多すぎたのではじかれたようです.

try except文は実行が失敗する可能性があるプログラムを動かすときに使用する構文です. tryの部分に実行したいコード, exceptの部分に実行して失敗した際に行う処理を記述します.

この構文を使用する理由はTwitterに投稿する際にツイートの文字数が多すぎると投稿に失敗することがあるからです.

【データの使い方講座】TwitterAPI×NoteAPIで自動広告アプリ制作 より引用


Twitter Botの文字数制限は割と大変


Twitter Botの文字制限の仕様

Twitterの文字数の制限はかなり難しい仕様になっています.

具体的には日本語(というより2バイトの文字)だと2文字扱いされたり, URLが23文字カウントされたりします. さらにこのURLかどうかはTwitter側で判断されるのでうまく調整すると結構大変です.

日本語が2文字扱いされることが面倒な理由は正規表現で捉えないといけないからです. 単純にPythonのlen関数で数えても1文字になってしまうので2バイトの文字を取得するという作業が必要になります.

これを解決するにはPythonのreモジュールで正規表現を使う必要があり, 一字一字チェックして数え上げということをする必要があります.

URLが23文字扱いなのもかなりの問題です. URLがURLと判断されるかどうかは投稿するまで分からないからです.

そんな仕様があったので過去の私は一律に「投稿に失敗したらエラーを吐いてください」というプログラムにしていたのでした.


改善点等


Twitterの文字制限を制御することは難しいものの, 工夫すれば投稿できない日を減らせると考えています. 例えば, 下記の様にして投稿に失敗したら別の文章を選んで再度投稿を試みるというプログラムにすれば五回連続で失敗しなければ投稿が出来るので, より安定した運用が出来そうです.

count = 0
while count <= 5:
    try:
        ...
        count = 6
    except:
        ...
        count += 1


総括


おわりに

今回は自作アプリのエラー処理でした! 想定内のエラーでほっとした半面, 1か月前に作ったものの仕様を忘れていたことに驚きました. 記憶力が落ちていないか心配です…

参考になったという方はぜひハートボタンを押していってください!

モチベーションが上がります!

記事内で不明な点等ございましたら気軽にご連絡ください.

Twitter: @kitahara_devemail: kitahara.main1@gmail.com

==================================================

Twitterでも発信しています!

今回のようなエラー以外にも発信をしています! 基本毎日更新していますので, 良ければ登録お願いします!


参考文献




この記事が気に入ったらサポートをしてみませんか?