はじめに、macOSを使用しているため、いくつかのパーツを使用することをお勧めします。
- 自動起動(起動)
- 構成ファイルの形式(plist)
- 通知に使用されるプログラム(端末通知者)
このOSに固有です。 ただし、プロジェクトに興味がある場合は、いくつかのパスを変更し、いくつかの関数をわずかに修正して、このコードを通知システム、yaml、たとえばクローネで動作させるようにするのは難しくないと思います。
だからポイントに。
お気に入りのテレビ番組の更新についてトラッカーをチェックし、新しいエピソードがいつ出てきたか、前のエピソードを見たかどうかを思い出すのは退屈です。 さらに、ご存知のように、2回以上行う必要があるのは自動化だけです。 プロジェクトは急いで開始され、改善される可能性があります。
何が含まれていますか?
- parser.pyのパーサークラス
- core.pyのローダークラス
- プラグインディレクトリ内のローダークラスを継承するプラグイン
- configsディレクトリ内の構成プラグイン構成ファイル
- 通知アイコンのアイコンディレクトリ
- プラグインをプルするmain.pyファイル
- Install.pyファイル
解析クラス
ほとんどすべてのシリーズサイトには独自のRSSフィードがあるため、プラグインを記述するプロセスを簡略化して、リンクによってrssを自動的に解析し、エンコードを指定する機能を持つペアのリスト(タイトル、リンク)を表示できる解析関数を作成することにしました。
少し後に、htmlの単純な解析が必要になり、次に、いくつかのサイトはjson形式のapiを介してリンクを提供できると考えられました。
そのため、関数は、承認が必要なサイトのセッションを保存する(セッションを要求する)クラスになり、 html() 、 rss() 、 json()およびauto()メソッドで応答オブジェクトを返します。 後者は、コンテンツ(xml、html、またはjson)と 'Content-Type'ヘッダーによるエンコードを推測しようとします。 デフォルトは「utf-8」およびhtmlです。
- Html()メソッドは、ページ全体のbeautifulsoupオブジェクトを返します
- rss()メソッドは、タプル(ヘッダー、リンク)の配列を返します
- json()メソッドは、ページテキストのjson.loadsメソッドによって取得されたオブジェクトを返します
ブートローダークラス
プラグインにparse()およびdownload()メソッドを提供します。
- parse()メソッドは、linkおよびurlパラメーターを渡す機能を提供します。 サイトが最後の変更に関する情報を提供する場合、「If-Modified-Since」もチェックします。 parse.pyファイルから応答オブジェクトを返します。
- download()メソッドは、シリーズの名前、エピソード、リンク、その他のささいな情報、およびhttp-headersとcookieを含む辞書を受け入れます。 そして、すべての魔法を独自に生成します。 彼が以前に作成したフォルダー「Serial_Name [plugin_class_name]」にファイルをロードします。プラグインのクラス名は、ダウンロードが行われるレコーディングスタジオ/サイトの名前であると想定されます。 ファイルがトレントの場合、トレントからエピソードをダウンロードし、トレントファイルを削除します。 ダウンロードはaria2cを使用して実行されます。これはシステムにインストールされ、$ PATHで指定されたディレクトリの1つに配置されている必要があります。 次に、 save()メソッドが呼び出され、リロードを防ぐために設定ファイルへのリンクが保存されます。
- 対応するアプリケーションがパス/ usr / local / bin / terminal-notifierに沿って見つかった場合、ダウンロードの開始および終了時に呼び出される__notify()メソッド。 あなたはそれが少し低く見えるか見ることができます。
プラグイン
予想されるパラメーターでdownload()メソッドを解析して呼び出すstart()メソッドを実装するブートローダークラスを継承するクラス。
プラグイン構成ファイル
* .plist
含む:
- 関心の質
- 購読リスト
- 除外リスト(「フルシーズン」など)
- last_modified最後の変更に関する情報を提供するサイト用
- リロードを防ぐために、リンクのリストがここに書き込まれます。
ディレクトリアイコン
関連するソースからのエピソードのダウンロードのロード/完了を通知するときに使用されるアイコンファイルを置くことができるフォルダー。 アイコンの名前はプラグインの名前と一致する必要がありますが、拡張子はjpg / ico / pngです。
main.py
pluginsディレクトリ内のすべてのプラグインのstart()メソッドが1つずつプルされます。
install.py
- 依存関係をインストールする
- プロジェクトファイルを〜/ .NB-series-downloaderに移動します
- 自動実行ファイルを作成します
- 複製されたリポジトリのディレクトリを削除します
オートロード
install.pyファイルはあなたのためにそれを行いますが、あなたがすべてを手動で行うことに決めた場合は、...
取扱説明書launchdに$ HOMEを伝えることができませんでした。したがって、$ HOMEの下のテキストをユーザーのホームディレクトリ/ユーザー/ユーザー名へのパスに置き換え、スクリプトディレクトリへのパスを別の場所に配置する場合は変更する必要があります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/bin</string> </dict> <key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict> <key>Label</key> <string>series_downloader</string> <key>ProgramArguments</key> <array> <string>python3</string> <string>$HOME/.NB-series-downloader/main.py</string> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>900</integer> <key>WorkingDirectory</key> <string>$HOME/.NB-series-downloader</string> </dict> </plist>
これらのコンテンツを含むファイルは、 series_downloader.plistという名前で、 〜/ Library / LaunchAgents /に配置する必要があります。
次のコマンドを使用して、このファイルで説明されているタスクをすぐにダウンロードできます。
launchctl load ~/Library/LaunchAgents/series_downloader.plist
それ以外の場合、タスクはコンピューターの次回起動時にアクティブになります。
これらのアクションにより、 $ HOME / .NB-series-downloader /ディレクトリにあるmain.pyが 900秒(15分)ごとに実行されます。
合計
Githubにリンクします。
正直なところ、私がそこに最初に置いたので、私は台無しにできました。 何か問題があれば教えてください。
ダウンロード開始通知:
ダウンロード後、「ダウンロード開始」の碑文が「ダウンロード完了」に変わります。
プラグインの結果として表示されるのはこれだけです。エピソードはきちんとパパに折り畳まれ、翼で待ちます。
私の場合、シリーズは同じディレクトリのシリーズに追加されます( core.pyの ダウンローダークラスのself.series_dirで別の場所を指定できます)。
ダウンロードしたシリーズを表示するために、 Alfred 3のワークフローを書きました。
各シリーズを見た後、彼は以下を提供します。
- 削除します(アーカイブを保存しません。表示されるものはすべてゴミ箱に送られます)
- 1から5までのエピソードの評価と、 myshows.meのアカウントでそのように表示されたばかりのメモを求め、それらのAPIを使用してエピソードの評価を設定します。
- すべてがうまくいったという通知を表示します
- 通知をクリックすると、myshowsで見たエピソードのページを開くことができます
しかし、それだけです-それは完全に異なる話です...