grep、wget / curlを使用して、今でもRSSを解析し続けています

RSSフィード

LostFilm RSSフィードからの新しいエピソードのダウンロードの自動化に関する以前の投稿で、 AmoN habrayuzerは、 RSSフィードのtorrentファイルへの直接リンクを含まない、私が説明したディストリビューションのダウンロードの不可能に関する正しい質問を提起しました。 例として、映画館ホールトラッカーが引用されました。 この投稿はこの問題を解決することに専念しています;)



導入する代わりに


最後の投稿の本質を簡単に説明します。 人気のあるトレントクライアントの多くでは、設定でトラッキングフォルダーを設定し、新しいファイルの外観が自動的にダウンロードを開始することを分析できます。 以前に作成されたシェルスクリプトは、トラッカーのRSSフィードを定期的に調べ、関心のあるディストリビューションを選択し、そのトレントファイルをトラッキングフォルダーにアップロードします。



私の名前は何ですか?


以前の方法のRSSフィードの選択とフィルタリングは、トレントファイルへのリンクの正規表現の分析に基づいていました。 たとえば、 http://www.lostfilm.tv/download.php/2035/Lost.s06e07.rus.PROPER.LostFilm.TV.torrent



ようなリンクを少し見ただけでも

シリーズ、シーズン、エピソードの種類をすぐに確認できます。 ただし、 AmoNが正しく指摘したように、すべてのRSSトラッカーにトレントファイルへの直接リンクが含まれているわけではないため、ダウンロードの自動化タスクが多少複雑になります。 この投稿の理由となったのはこの機能でした:)



いや、始めましょう


まず、実験的なRSSフィードの形式を注意深く調べました。 そして、ここに私が見たものがあります:



<item>

<title>The 3 Great Tenors - VA / Classic / 2002 / MP3 / 320 kbps</title>

<description>: - </description>

<link>http://kinozal.tv/details.php?id=546381</link>

</item>








つまり、リンクにはディストリビューションの名前が含まれていないだけでなく、トレントファイルへの直接リンクでもありません。 それでは、トレントファイル自体を取得するには、リンクをたどる必要があります。ロードされたページでは、既にファイルへの直接リンクを取得しています。



計画を立てる


少し考えて、次のアルゴリズムを思いつきました。

  1. RSSフィードhttp://kinozal.tv/rss.xml



    およびgrep



    を読み、説明によって興味のある分布を選択します。



    curl -s http://kinozal.tv/rss.xml | grep -iA 2 'MP3'







    ここで、「- -s



    」は「静かになる」ことを示します。

    " -i



    "-大文字と小文字を区別しない検索、

    -A 2



    」-grepに、検出された行とともに、それに続く2行を表示するように指示します(これらには、目的のリンクが含まれています)



  2. grep



    て選択したディストリビューションのうち、リンクのみgrep



    残します。



    grep -ioe 'http.*[0-9]'







  3. 見つかったすべてのリンクのループを開きます。



    for i in ... ; do ... ; done







    ここで、リストの代わりに「マジック」引用符`...`



    使用して、以前の調査の2つの結果`...`



    置き換えます。



    for i in `curl -s http://kinozal.tv/rss.xml | grep -iA 2 'MP3' | grep -ioe 'http.*[0-9]'`; do ... ; done







  4. ループ内で、各リンクのページをロードし、再びgrep



    から、そこからトレントファイルへのリンクを引き出します。



    curl -sb "uid=***; pass=***; countrys=ua" $i | grep -m 1 -ioe 'download.*\.torrent'







    ここで、「 -b "uid=***; pass=***; countrys=ua"



    -b "uid=***; pass=***; countrys=ua"



    -b "uid=***; pass=***; countrys=ua"



    "-送信されたCookieに認証情報を設定するオプション、

    -m 1



    」-トレントファイルへの2つの直接リンクの最初のリンクのみを残します(はい、映画配信の説明のページで、同じファイルへのリンクが2回見つかります)



    パスワードもuid もクリアテキストで送信されないことに注意してください 。 それらの値は、ブラウザでCookieウィンドウを開くか、たとえばFireFox プラグインを使用して確認できます



  5. トレントファイルwget



    'omを読み込む:



    wget -nc -qi - -B "http://kinozal.tv/" -P ~/.config/watch_dir --header "Cookie: uid=***; pass=***; countrys=ua"







    -B "http://kinozal.tv/"



    マークするオプションの場所-B "http://kinozal.tv/"



    "-相対リンクをダウンロードするためのプレフィックス/ドメインを設定します(つまり、それらは映画の配信説明ページにあります)。

    および「 --header "Cookie: uid=***; pass=***; countrys=ua"



    --header "Cookie: uid=***; pass=***; countrys=ua"



    --header "Cookie: uid=***; pass=***; countrys=ua"



    " -GETリクエストのヘッダーを設定します(今回は、ファイルを介さずに、そのような方法でCookieを転送したかったのです:))



  6. サイクルの始まりへの移行




そして、私たちは何を持っています


そして最後に、このような「 単純な 」コマンドを取得します。

for i in `curl -s http://kinozal.tv/rss.xml | grep -iA 2 'mp3' | grep -ioe 'http.*[0-9]'`; do curl -sb "uid=***; pass=***; countrys=ua" $i | grep -m 1 -ioe 'download.*\.torrent' | wget -nc -qi - -B "http://kinozal.tv/" -P ~/.config/watch_dir --header "Cookie: uid=***; pass=***; countrys=ua"; done







そして完全な幸福のために、このコマンドはcron



で書かれるべきです:



*/15 * * * * > /dev/null 2>&1







シムのすべてのために、私は私の休暇を取ることができます:)




UPD このシリーズの前回の投稿へのコメントでは、サーバーの負荷を最適化するための興味深い提案がいくつかありました。

habrahabr.ru/blogs/p2p/87042/#comment_2609116 (ファイルの存在の確認)

habrahabr.ru/blogs/p2p/87042/#comment_2609714(Last-ModifiedおよびETagを使用)



UPD2apatrushevアドバイスで、head -1



」をオプションgrep



-m 1



」に置き換えました。



All Articles