MyShows.comで視聴したエピソードをマークする

問題の声明


タスク: myshows.ruで視聴済みのエピソードをマークするためのルーチンアクションを自動化する。 ビッグバン理論の次のシリーズを見てから、シリーズを開き、シリーズを見つけ、見たエピソードを見つけて、「見た」とマークします。

api.myshows.ruの発見後、このアイデアはすぐにこのプロセスを大幅に簡素化し始めました。 このように表示したいと思います。表示したばかりのシリーズでファイルのコンテキストメニューを呼び出して、「Mark on myshows.ru」を選択します。

基本は、ファイル名を引数として受け取り、シリーズ名、シーズン、エピソード番号を決定し、サイトAPIを介してプロファイル内のシリーズをマークするRubyスクリプトです。

API


まず、Ruby APIの上にラップすることが決定されました。 その結果、httpartyを使用してサイトと通信する目立たないmyshowsライブラリができました。 私の一般的な雇用のため、ライブラリはサイトのすべての機能を実装するのではなく、テレビ番組/エピソードを検索してマークするだけです。これはまさにタスクを解決するために必要なものです。 以下に使用例を示します。

require 'rubygems' require 'myshows' profile = MyShows::Profile.new 'demo', 'fe01ce2a7fbac8fafaed7c982a04e229' tbbt = profile.show 'big bang theory' tbbt.title # => 'The Big Bang Theory' pilot = tbbt.episode 1, 1 pilot.title # => 'Pilot' pilot.check! 

シリーズの中で名前でシリーズを検索するProfile#showメソッドは、シリーズの名前を正確に検索するように最適化されていることに注意してください。 彼は、名前の略語、名前の一部、スペースなしの名前などでシリーズを見つけることができます。 これは、ファイル名のシリーズの名前がしばしば大きく歪んでいるという事実によるものです。lie.to.me.s03e01.webdl.rus.novafilm.tv.aviの代わりにlietome.s03e01.webdl.rus.novafilm.tv.avi、House House.s07e01.rus.LostFilm.TV.aviの代わりに.MDs07e01.rus.LostFilm.TV.aviなど。

ファイル名の解析


スクリプトは、シリーズのファイル名を受け取り、シリーズの名前、シーズンの番号、エピソードを認識できる必要があります。 誰もが後ろに立つ。 正規表現を知っています。 ファイル名に含まれるこの情報のレコード形式をローカルエリアネットワークで検索した後、2つの主要なものを特定し、対応する正規表現を記述しました。
他の区切り文字の有無にかかわらずバリエーションもありますが、これは正規表現をそれほど複雑にしません。 これらは非常に単純であるため、parse_filename関数の最終的なスクリプトコードで見つけることができます。

UPD: 1つのファイルが2つのシリーズに対応できることを思い出しました。 この問題は、正規表現の簡単な修正によって解決されます。

スクリプト


ファイル名の解析とmyshowsライブラリの使用を組み合わせて、単純なスクリプトが取得されます。このスクリプトは、ファイル名を引数として使用し、プロファイルでそれらをマークしようとし、このアクションの成功についてstdoutに報告します。

 $ myshows-checker ".../V.s02e01.LostFilm.TV.avi" ".../V.s03e01.LostFilm.TV.avi" Checked V (2009) - 2x1 - Red Rain Error: episode with number 3x1 was not found in show V (2009) 

スクリプトは〜/ .myshowsファイルからユーザー名とmd5パスワードを抽出しようとしていますが、より良い方法は思いつきません。

ファイルマネージャーでの統合


もちろん、このスクリプトは他のスクリプトやコマンドラインから使用できますが、ファイルマネージャーでテレビ番組をダブルクリックしてテレビ番組を見ています。

ここで、私はMac OS Xユーザーであると言う必要があります。したがって、これ以降の言葉は、以前に記述されたスクリプトとこのOSの統合についてです。 興味がない場合は、すぐに結論に進むことができます。

Automatorを使用します。 「任意のプログラム」で「選択したムービーファイル」を受け取る新しいサービスを作成する必要があります。

アクション「シェルスクリプトを実行」を追加し、言語として「/ usr / bin / ruby​​」を選択し、「引数として」入力を渡します。 次に、以前に記述したスクリプトをフィールドに貼り付けてスクリプトを入力し、そこにあったものを置き換えます(美しさのために、最初の行「#!/ ...」を削除できます)。

アクション「AppleScriptを実行」を追加します。 何らかの形で、スクリプトが印刷した情報メッセージを表示する必要があります。 表示ダイアログ機能を使用することが決定され、次のAppleScriptのようなものになります。

 on run {input, parameters} repeat with msg in input display dialog msg buttons {"OK"} end repeat return input end run 

次のようなものが必要です。


このサービスはすぐに使用でき、保存して名前を付けるだけです。 これで、Finderで呼び出すことができます。


UPD: Growlを使用してメッセージを表示できることを提案しました。 これを行うには、次のAppleScriptを1回実行する必要があります

 tell application "GrowlHelperApp" register as application ¬ "MyShows Checker" all notifications {"Notification"} ¬ default notifications {"Notification"} end tell 

作成したサービスに変更を加えます

 on run {input, parameters} repeat with msg in input tell application "GrowlHelperApp" notify with name ¬ "Notification" title ¬ "MyShows Checker" description msg ¬ application name ¬ "MyShows Checker" image from location ¬ "file:///path/to/some/image.png" end tell end repeat return input end run 

オプションで、「場所からの画像」の行の後に、アイコンとして使用される画像へのパスを指定できます。そうでない場合は、「画像から...」から「... / some / image.png」へとピースを消去します。

「ダイアログを表示する」よりもはるかに良く見える


おわりに


うまくいきます。

測定によると、スクリプトの平均実行時間は1つのシリーズのエピソードをマークするのに2-5秒、つまり、シリーズの1つのエピソードをマークすると10がほぼ同じ時間がかかりますが、10の異なるシリーズのパイロットエピソードをマークすると20-50秒かかります。必要ありません。 システム全体のボトルネックはサイトへのリクエストであり、エピソードの大きなリストを送り出します。 Automatorによって作成されたサービスはより長く機能し、常に追加されます。

そして今、私はこのアイデアに興味のある人にアピールしています。 myshows.ruでテレビ番組を祝い 、Windows、KDE、Gnomeなどを使用している人はきっといます。 Rubyスクリプト自体はクロスプラットフォームですが、特定のファイルマネージャーとの統合はそうではありません。 この点で、このようなRubyスクリプトをお気に入りのファイルマネージャーに統合する方法を教えてくれる人々が求められています。

UPD:
bashの代替実装についてNebulosaに感謝します。

Source: https://habr.com/ru/post/J112772/


All Articles