業務連絡:WeTheMedia🇯🇵日本語訳チャネルは新バージョンをテスト中
ここ数日かけて、Botの安定化と、新機能の実装と両方をチマチマとやっていたのですが、今日の運用している感じだと、おかしなエラーは無くなった感じなので、もうちょっと様子見します。
これから寝るので止まってたら対処できるのは8時間後くらいかなーーー。
エラーで止まるのは、主にDeepLが混んでいるときに翻訳のリクエストだして拒否られる感じと思うので、DeepLへのAPIコールはTry Exceptをwhileループに入れて、2回目のリトライをしたり、数秒のウェイトを入れたりして、混雑を避ける努力をしたので、これが原因だったのなら安定化するんじゃないかなーと期待しています。
あとは、テレグラムのウェブページインスタントビューという機能があるのですが、URLが含まれる投稿すると、投稿中に記事のタイトルと二行くらいの記事の出だしとかが含まれるじゃないですか。
あの部分が取得できたらツイッターでも投稿者と出だしくらいは取得できて、翻訳できちゃうかなーと思って、このインスタントビューを取得する方法を探していたんだけど、なーんかよく分からないんですよね。
というのがTDLibにあるから、これなんだろうなーとは思ったけど、これを使ってもエラーしか出てこなくってどうやって使うのか訳わかんねーよと思ってたんだけど、今回再挑戦したら、たまにプレビューが取得出来る時があったので、単にプレビューがあったりなかったりするだけらしいです。
これはPython側からは
from telegram.client import Telegram
tg = Telegram(api_id, api_hash, phone, database_encryption_key)
tg.login()
instant_view = tg.get_web_page_instant_view(url)
instant_view.wait()
で取得できます(たまに)。恐らく起動したtgインスタンスのsqlite3データベースにキャッシュされていないといけないパターンだと思うから、同一セッション内でUpdateを取得してデータベースにキャッシュさせてからAPIコールすると結果が変わる時がある気がする。
def getWebPagePreview(tg, url):
data = {
'@type': 'getWebPagePreview',
'url': url,
}
return tg._send_data(data)
もしかしたらインスタントビューとWebPagePreviewって違うのかなー。こっちはAPIをもとに自作した関数だけど、結果はこれもエラーばっかりだ。
で、取得できたときには、最大500文字までの記事の出だしとタイトルを投稿に含めるようにしてみたので、URLだけのような短い投稿ではMeaning Cloudの要旨サービスが活躍していましたが、プレビューがある時はこちらのデータも追加されると思います。
例えばこの投稿
という短い投稿ですが、プレビューがあったようで、次が追加されました。
これがdeeplで翻訳されて
こんな感じでプレビューがある時は
タイトル by 記者の名前
500文字までの出だし
というフォーマットで記事のプレビューが見れるようになっています。
ただ、プレビューが取得できたケースがあまりないのでテストがあまく、取得できたデータをうまくParsingできるかが不透明なのが、辛いところ。
今の所、10個くらい?テストできたのは。
まあ、帰ってくる値はnestされたdictなんだけど、再帰関数でrecursiveにデータを探すようにしたから大丈夫なはずではあるのですが、世に放つと思わぬエラーに出くわすのが現実でごわします。
で、せっかくやったプレビューだけどTwitterには効いていない感じ。投稿にはプレビューがあるのにAPI経由では取得されせくれないのかい・・・。
ふうぅ・・。