新しいNexus ファクトリー イメージがリリースされるたびに、Pushbullet チャネルに更新をプッシュするために使用しているスクリプトを作成しました。そのページの最初の 11 台のデバイスごとに個別のチャネルが存在し、かなり複雑なスクリプトを使用して更新を監視しています。完全なセットアップはこちら(具体的にはこのスクリプト) ですが、以下にスクリプトを簡単に要約します。私の質問は次のとおりです。複数の障害点が発生しやすいため、これは明らかに正しい方法ではありません。これを行うためのより良い方法は何でしょうか? 私は Python に固執することを好みますが、他の言語がよりシンプルで優れている場合は、他の言語にもオープンです。
(この質問は、私が今夜 apache 2.4 の設定を更新したという事実によって促されました。それによりurlwatch
、 によって監視されているローカル ファイルの出力がわずかに変更されたようです。そのため、11 チャンネルすべてに誤った更新がプッシュされました。)
基本的なスクリプト機能 (一部の重要でない部分は含まれていません):
- 完全なモデル名に関連付けられた各デバイスのコードネームのディクショナリを作成します
- リクエストを使用して既存の Nexus Factory イメージ ページを取得する
- ソースコードからbs4オブジェクトを作る
- ディクショナリ (ループ) 内の 11 個のデバイスのそれぞれについて、次の手順を実行します。
- デバイスのパブリック Web ディレクトリでページを開く/作成する
- bs4 を使用してフィルター処理された、そのページにソースを書き込みます。
str(soup.select("h2#" + dev + " ~ table")[0])
- ページで呼び出し
urlwatch
て更新を確認し、出力を一時ファイルに保存します - If temp file size is > 0 then the page has changed, so push update to the appropriate channel
- Remove webpage and temp file
A thought that I had while typing this question: Would a possible solution be to save each current version string (for example: 5.1.0 (LMY47I)
) as a pickled variable, then if urlwatch
detects a difference it would compare the new version string to the pickled one and only push if they're different? I would throw regex matching in as well to ensure that the new format matches the old format and just has updated data, but could this at least be a good temporary measure to try to prevent future false alarms?