Giter VIP home page Giter VIP logo

net-radio-archive's Introduction

ねとらじあーかいぶ

Net Radio Archive

なにこれ

ネットラジオを録画するやつ

今のところ対応しているラジオ

  • Radiko (エリアフリーも対応)
  • 超A&G+
  • 音泉
  • AG-ON Premium
  • らじる(NHK)
  • ニコ生(ニコニコ生放送)

特徴

「全部の番組」を取ります。

大抵の録画ソフトは時間していで録ったりしますがそうじゃない。

今ブレイクしてる新人声優の2年前のラジオ番組を掘り起こしたい! あと新番組を取り逃す心配がなかったり、ザッピングしていると意外とおもしろいラジオ発掘したりできて便利。

必要なもの

  • 常時起動しているマシン
  • LinuxなどUNIX的なOS
    • WindowsでもBash on Windows / Windows Subsystem for Linuxなら動きますがcronに依存しており、WSLではcronを動かすのが少し手間です
  • Ruby 2.4 or later
  • rtmpdump
  • swftools
  • あたらしめのffmpeg (HTTP Live Streaming の input に対応しているもの)
    • ※最新のffmpegの導入は面倒であることが多いです。自分はLinuxではstatic buildを使っています。 http://qiita.com/yayugu/items/d7f6a15a6f988064f51c
    • Macではhomebrewで導入できるバージョンで問題ありません
  • livedl
  • (ラジコエリアフリー利用者のみ)
    • ラジコプレミアム会員のアカウント
  • (AG-ON Premiumのみ)
    • AG-ON Premiumのアカウント
  • (ニコ生のみ)
    • プレミアム会員のアカウント

セットアップ

ふつうにセットアップ

# 必要なライブラリをインストール
# Ubuntuの場合:
$ # Mysqlは5.6以外でも可
$ # Ubuntu 14.04だとrubyのversionが古いのでお好きな方法orこの辺(https://www.brightbox.com/blog/2016/01/06/ruby-2-3-ubuntu-packages/ ) を参考に新しめなバージョンをインストールしてください
$ sudo apt-get install rtmpdump swftools ruby git mysql-server-5.6 mysql-client-5.6 libmysqld-dev
$ sudo service mysql start # WSLだとっぽい表示がでるかもしれませんがプロセスが起動していればOK

$ # libavがインストールされている場合には削除してから
$ wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
$ tar xvf ffmpeg-release-amd64-static.tar.xz
$ sudo cp ./ffmpeg-release-amd64-static/ffmpeg /usr/local/bin

$ wget https://github.com/yayugu/livedl/releases/download/20181107.38/livedl
$ sudo cp ./livedl /usr/local/bin/livedl
$ sudo chmod +x /usr/local/bin/livedl
# 取得したコンパイル済みバイナリが正常に動かない場合は、ここから(https://github.com/himananiito/livedl)ソースを取得して自前でコンパイルし、上記パスにインストールする

$ git clone https://github.com/yayugu/net-radio-archive.git
$ cd net-radio-archive
$ (sudo) gem install bundler
$ bundle install --without development test agon
$ cp config/database.example.yml config/database.yml
$ cp config/settings.example.yml config/settings.yml
$ vi config/database.yml # 各自の環境に合わせて編集
$ vi config/settings.yml # 各自の環境に合わせて編集
$ RAILS_ENV=production bundle exec rake db:create db:migrate
$ RAILS_ENV=production bundle exec whenever --update-crontab
$ # (または) RAILS_ENV=production bundle exec whenever -u $YOUR-USERNAME --update-crontab

# アップデート
$ git pull origin master
$ git submodule update --init --recursive
$ bundle install --without development test agon
$ RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec whenever --update-crontab

cronに MAILTO='[email protected]' のように記述してエラーが起きた時に検知しやすくしておくと便利です。

Dockerでセットアップ

Dockerの知識がある程度必要ですがわかっていれば楽です。

まずMySQLサーバーを用意してください。 ローカル用意してもdocker-composeとかで建ててもなんでもいいです そしてDockerコンテナからそのMySQLに疎通できるようにしておいてください

$ git clone https://github.com/yayugu/net-radio-archive.git
$ cd net-radio-archive

$ cp config/database.example.yml config/database.yml
$ cp config/settings.example.yml config/settings.yml
$ vi config/database.yml # 各自の環境に合わせて編集
$ vi config/settings.yml # 各自の環境に合わせて編集

$ docker build --network host -t yayugu/net-radio-archive .

# 起動
# いくつかのディレクトリはホストのものを使うことを推奨しています
# /working : 作業用ディレクトリです。それなりに容量を消費します
# /archive : 録画したファイルが置かれるディレクトリです。大事
# /myapp/log : ログが置かれるディレクトリです
$ docker run -d --rm --network host \
  -v /host/path/to/working/dir:/working \
  -v /host/path/to/archive/dir:/archive \
  -v /host/path/to/log:/myapp/log \
  yayugu/net-radio-archive

# 長期運用する場合はlogrotateを入れておきましょう
$ cat /etc/logrotate.d/net-radio-archive
/host/path/to/log/*.log {
    daily
    missingok
    rotate 7
    notifempty
    copytruncate
}

FAQ

Q. 使い方でわからないところある

A. Githubでissueつくってください。

Q. ◯◯に対応してほしい

A. Githubでissueつくってください。あとpull req募集中

Q. radikoがうまく動かない

A. Radikoはアクセスする側のIPによってどの局を聴けるかが変わります。 ブラウザで開いてみたり、以下のページなどを参考にご自身が聞ける局をsettings.ymlに設定してください。

http://d.hatena.ne.jp/zariganitosh/20130214/radiko_keyword_preset

またプレミアム会員になることでエリアフリーですべての局を聴取することができます。 ご自身のIPが希望する局のエリア外の場合にはラジコプレミアムに加入してradiko_premiumの設定を試してみてください

Q. AG-ON Premiumで有料コンテンツを録画できない

自分が契約している月額コンテンツがないため、検証ができていません。 そのため録画リストへの追加を行わないようにしています

対応してくれるpull reqを募集しております

Q. rtmpdumpが不安定 / CPUを100%消費する

gitで最新のソースを取得してきてビルドすると改善することが多いです。

http://qiita.com/yayugu/items/12c0ffd92bc8539098b8

Q. 録画がはじまらない / 特定のプラットフォーム or 局のみ録画がはじまらない

番組表の取得がまだ行われていない可能性があります。 config/schedule.rbを見ていただけるとわかるのですが番組表の取得は昼間中心となっています。お急ぎの場合は手動で

$ RAILS_ENV=production bundle exec rake main:XXXX_scrape

を実行してください

Q. ニコ生の動作がいまいち

ニコ生については色々制約が多いです

  • プレミアム会員必須
  • タイムシフトから取得するためタイムシフトに対応していない番組は対応不可
  • コメントはいまのところ取得できない
  • さまざまな理由でダウンロードに失敗することがある

改善のpull reqお待ちしております

net-radio-archive's People

Contributors

akimasa avatar hogewest avatar juzumaru avatar nm7 avatar sobadon avatar soramugi avatar ssig33 avatar t-ashula avatar yayugu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

net-radio-archive's Issues

Radikoの一部局の録音ができない (radiko_hls)

環境: Radiko TOKYO判定、非ログイン

radiko_hlsブランチのRadiko録音について、
少なくとも ラジオNIKKEI1(RN1)、ラジオNIKKEI2(RN2) の録音が行えていない状態です。

エラーとしては、

uri = "http://c-radiko.smartstream.ne.jp/#{job.ch}/_definst_/simul-stream.stream/playlist.m3u8"

で定義されたc-radikoサーバのHLSのURLをGETした結果が404で、bodyに想定した内容が来ていないため、
@m3u8_url = /^https?:\/\/.+m3u8$/i.match(res.body)[0]

で[0]がnilのためエラーとなっています。

他のプロジェクトやWeb版の動作を確認したところ、
http://radiko.jp/v2/station/stream_smh_multi/RN1.xml
https://radiko.jp/v3/station/stream/pc_html5/RN1.xml
よりHLSのURLを取得していました。(RN1はチャンネル)
stream_smh_multiでTBS等他チャンネルとRN1の内容を見比べると、
TBSのほうはareafree=0/1の各ノードでc-radiko/f-radikoの両方のURLが定義されていましたが、RN1やRN2ではどちらもf-radikoのURLが定義されているため、RN1/RN2についてはc-radikoサーバで配信がされていないようです。

対処としては上記xmlよりHLSのURLを取得するのが正攻法のようですが、簡単な回避策としてはc-radikoで404ならf-radikoでリトライするという対応で対処ができそうでしたので、これから試します。

ニコ動対応

チャンネルで期間限定配信しているコンテンツ(アニたまなど)用に対応したい
youtube-dlを流用したいので

ytdl-org/youtube-dl#14582

これが直ったら着手する予定です

らじる(radiru)の録音が高頻度で失敗する

ちょっと頻度が高すぎる(5〜10件に1回)のでどうにかしたい

#43

手元の環境でらじるの録音が短時間で終了してしまうことがありました。
production.logを見ると

W, [2017-09-06T16:04:05.581250 #19198]  WARN -- : radiru ffmpeg command:        -loglevel error         -y         -i https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8         -t 2460         -vcodec none -acodec copy -bsf:a aac_adtstoasc         /usr/local/etc/net-radio-archive/tmp/working/fm/2017_09_06_1600_\音\楽\遊\覧\飛\行_-_\エ\キ\ゾ\チ\ッ\ク\ク\ル\ー\ズ\~\暑\い\国\の\涼\し\い\音\楽\~_-.m4a output:https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8: Server returned 403 Forbidden (access denied)

とか、404 Not Found とかが記録されていて

Windows対応したい

あんまりいい方法思いつかないんだけど、さくっとインストールしてダブルクリックで動かせるといいよね

AG-ON対応

あれiPhoneで見づらいんだよね〜

radiko動いていない?

radiko、動いていますか?
正しい動作がまだ分かっていなく、動いているのかもしれないのですが、
lib/radiko/scraping.rbのhttp://radiko.jp/v2/api/program/station/weekly
404になっている様です。

(データベーステーブルは db:migrate で生成されなかったので、db/schema.sql
を流しています。これが原因かもしれませんが…。)

超!A&G+の録音ができない

6/4の22時過ぎから、超!A&G+のみ録音ができなくなってしまいました。
当方の環境によるものかもしれませんが、Issues上げさせていただきます。

> cat net-radio-archive/log/production.log
E, [2020-06-04T23:00:22.986773 #6127] ERROR -- : rec failed. job:#<Job:0x0000559db3af8c40>, exit_status:pid 6235 exit 2, output:
E, [2020-06-04T23:30:23.178785 #6864] ERROR -- : rec failed. job:#<Job:0x000055eecf89f738>, exit_status:pid 6952 exit 2, output:
E, [2020-06-05T00:00:23.370823 #7614] ERROR -- : rec failed. job:#<Job:0x0000559c34126008>, exit_status:pid 7741 exit 2, output:
E, [2020-06-05T00:57:23.530753 #8969] ERROR -- : rec failed. job:#<Job:0x00005577a9ea3910>, exit_status:pid 9096 exit 2, output:
E, [2020-06-05T01:00:23.754822 #9043] ERROR -- : rec failed. job:#<Job:0x0000564f51cc6c70>, exit_status:pid 9165 exit 2, output:
E, [2020-06-05T01:30:23.946771 #9812] ERROR -- : rec failed. job:#<Job:0x000055985fd81060>, exit_status:pid 9900 exit 2, output:
E, [2020-06-05T02:00:24.138775 #10459] ERROR -- : rec failed. job:#<Job:0x000055e874dd6a78>, exit_status:pid 10566 exit 2, output:
E, [2020-06-05T02:30:22.282707 #11170] ERROR -- : rec failed. job:#<Job:0x000055b7c36cf9c8>, exit_status:pid 11258 exit 2, output:

radikoプレミアム対応を

Issueというより要望ですが,radikoプレミアム認証に対応させると,自宅サーバから全国の放送局を録音できるようになってエアチェックが捗ります.

最近のFirefox+Selenium Web-DriverでAG-ONが録音できない

今までAG-ONの録音はやってなかったのですが、試しにやってみたところ、最近のバージョンの
Firefox+Selenium Web-Driverではちゃんと動きませんでした。

http://qiita.com/yssg/items/a054d67bc7c7fc39b276

最近では、Selenium Web-Driverは3.xに上げて、Firefoxには追加でGecko Driverをインストールしないと
だめなようです。

さらに、lib/agon/download/downloading.rb にもこんな感じのパッチを当てたら、動くようになりました。
ユーザーエージェントの設定方法が変わったのと、配信ページへの直接navigateではHLSへのリンクが
取得できなかったので、いったんログインページからログイン後、配信ページへ遷移するようにしました。

sleepのところはもうちょっとマジメに読み込みを待つようにしたほうがいいでしょうが…。

Gemfile.lockとかの修正も必要なので、プルリクではなくいったんIssueにて。

--- a/lib/agon/downloading.rb
+++ b/lib/agon/downloading.rb
@@ -16,7 +16,8 @@ module Agon
         end
         profile = Selenium::WebDriver::Firefox::Profile.new
         profile['general.useragent.override'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) Mobile/13A4254v
-        @s = Selenium::WebDriver.for :firefox, profile: profile
+        caps = Selenium::WebDriver::Remote::Capabilities.firefox(firefox_options: { profile: profile.as_json.values.first })
+        @s = Selenium::WebDriver.for :firefox, desired_capabilities: caps

         url = get_m3u8_url(program)
       rescue => e
@@ -29,13 +30,16 @@ module Agon
     end

     def get_m3u8_url(program)
-      @s.navigate.to "http://ct.uliza.jp/AG-ON/play.aspx?clientid=749&msid=339&episodeid=#{program.episode_id}"
+      @s.navigate.to "https://ct.uliza.jp/AG-ON/smartphone/login.aspx?clientid=749&msid=339"
       elm = @s.find_element(:name, 'mail')
       elm.send_keys Settings.agon.mail
       elm = @s.find_element(:name, 'passwd')
       elm.send_keys Settings.agon.password
       @s.find_element(:id, 'btnLogin').click

+      sleep(3)
+
+      @s.navigate.to "http://ct.uliza.jp/AG-ON/play.aspx?clientid=749&msid=339&episodeid=#{program.episode_id}"
       m3u8_url = @s.find_element(:tag_name, 'video')['src']
       @s.quit
       return m3u8_url

scraping機能だけgemで使えるといいですよね

スクレイピング部分を作るのはめんどくさいので、放送開始アラートとかつくりたいときなんかに他の人にも役立つんじゃないだろうか。

repository分けるのは面倒なのでrails/railsみたいに1 repositoryでgemも入ってる状態にしときたい

A&Gが録音できてない。

10月に入ってからA&Gが録音できなくなりました。
またURL変更でもあったんでしょうか?

超!A&G+の録音が出来ない

11/17の夜頃から、超!A&G+の録音ができなくなっております。
色々とURLを変えて試してみましたがどれも機能しないようでした。もしかするとRTMP自体の配信が終了しているかもしれません。

音泉のリニューアル

音泉のリニューアルに伴って、録音できなくなっています。

production.logにエラーが記録されています。
E, [2020-07-28T13:04:11.937247 #61762] ERROR -- : onsen scraping error: http://www.onsen.ag/app/programs.xml, 307

URLにアクセスすると404になるので、場所が変わったみたいです。

Radikoの録音ができない

12月2日の20時頃から、Radikoの録音ができない状態になっているようなので Issue上げさせていただきます。

直近のproductoin.logの一部を掲載します。

E, [2020-12-05T09:25:06.723916 #32684] ERROR -- : [
"
NoMethodError#<NoMethodError: undefined method `[]' for nil:NilClass>
/home/ubuntu/net-radio-archive/lib/radiko/recording.rb:99:in `block in auth1'
/usr/lib/ruby/2.5.0/net/http.rb:910:in `start'
/home/ubuntu/net-radio-archive/lib/radiko/recording.rb:86:in `auth1'
/home/ubuntu/net-radio-archive/lib/radiko/recording.rb:42:in `auth'
/home/ubuntu/net-radio-archive/lib/radiko/recording.rb:30:in `block in exec_rec'
/home/ubuntu/net-radio-archive/lib/main.rb:10:in `block in retry'
/home/ubuntu/net-radio-archive/lib/main.rb:8:in `times'
/home/ubuntu/net-radio-archive/lib/main.rb:8:in `retry'
/home/ubuntu/net-radio-archive/lib/radiko/recording.rb:29:in `exec_rec'
/home/ubuntu/net-radio-archive/lib/radiko/recording.rb:17:in `record'
/home/ubuntu/net-radio-archive/lib/main/main.rb:226:in `block in rec_one'
/home/ubuntu/net-radio-archive/lib/main/main.rb:310:in `block (2 levels) in threads_from_records'
"
]

AG-ON Premium対応

株式会社文化放送では、2012年4月よりA&Gオンデマンドサイト「AG-ON」の運営を行なってまいりましたが、2017年3月17日より従来の「AG-ON」には無かった様々な新機能を追加した「AG- ON Premium」の提供を開始することとなりました。
「AG-ON Premium」の提供開始に伴い、「AG-ON」は半年間の移行期間をもって閉鎖いたします。

ということで秋までには対応する必要がでてきました

MySQL以外のRDBMSでも動くように

MySQL specificなコードになってるんですが、SQLiteなんかだと動かないデータ量を使っているわけじゃないのでRails標準っぽい感じに寄せてSQLiteとかでも動くようにすると環境構築楽ですよね

音泉の番組のダウンロードに失敗する

rake main:rec_ondemand を実行して音泉の番組をダウンロードしようとするとエラーになりました。

$RAILS_ENV=production bundle exec rake main:rec_ondemand
rake aborted!
EOFError: end of file reached

Tasks: TOP => main:rec_ondemand
(See full trace by running task with --trace)

エラーになるのは https で配信されるようになった番組のようです。

select id, title, file_url, created_at from onsen_programs WHERE file_url like 'https%'
+------+------------------------------------------------------+-----------------------------------------------------------+---------------------+
|   id | title                                                | file_url                                                  | created_at          |
|------+------------------------------------------------------+-----------------------------------------------------------+---------------------|
| 2673 | ほめられてのびるらじおZ                              | https://onsen-dl.sslcs.cdngc.net/radio/home170126As8h.mp3 | 2017-02-02 13:04:34 |
| 2676 | クズの女子会                                         | https://onsen-dl.sslcs.cdngc.net/radio/kuzu170126As8h.mp3 | 2017-02-02 13:04:34 |
| 2672 | ラブライブ!サンシャイン!! Aqours浦の星女学院RADIO!!! | https://onsen-dl.sslcs.cdngc.net/radio/llss170201mK2h.mp3 | 2017-02-02 13:04:34 |
+------+------------------------------------------------------+-----------------------------------------------------------+---------------------+

30日より短い日数でworking filesを消せるようにして欲しい

ブロックストレージの容量が少ない環境(Raspberry PiかVPSなので容量が30GB程度)で使いたいので、7日とかでworking filesが消えるようにして欲しいです。設定で削除するまでの日数を設定できる感じです。
ちなみに、archive_dirの内容は毎日、他の場所(手元のHDDかAmazon S3やBackblaze B2)に転送する予定なのでブロックストレージの容量が少なくてもやっていけるかと思います。

Rubyはあまり書いたことが無いので、Pull Requestが出来るか、自信が無いです。対応していただけるとありがたいです。よろしくお願いします。

超A&G URL変更?

番組表URLが変わりましたね。
lib/ag/scraping.rb の番組表URLを書き換えましたが、

(log/production.log)

E, [2023-04-29T13:59:50.016950 #3374744] ERROR -- : rec failed. job:#Job:0x000056106eaa3690, exit_status:pid 3374888 exit 1, output:[tcp @ 0x621d640] Connection to tcp://fms2.uniqueradio.jp:443 failed: Connection refused
https://fms2.uniqueradio.jp/agqr10/aandg1.m3u8: Connection refused

でエラーになり録音に失敗します。
Referer的なものが必要?

hibikiのダウンロードが終わらない

README で紹介されている static link 版の ffmpeg を使用して、net-radio-archive を
最新に更新して hibiki をダウンロードしようとしていますが、ffmpeg のプロセスがいつまでも
残り続けてダウンロードが終わりません。

working_dir にはそれなりのサイズの mp4 が保存されていますが、壊れて再生できません。

作者さんの環境ではいかがでしょうか?

rake main:rec_ondemand の EOFError: end of file reached エラー対応

とりあえず報告

一昨日(1/25)の19:06頃から(?)rake main:rec_ondemandのタスクでエラーメールが届くようになってました。

エラー内容

rake aborted!
EOFError: end of file reached
~~~~~~

調べると音泉でのダウンロードエラーらしく、名前的に開発テストのダミーデータを拾っちゃってたらしいのでsqlでstateの値変更してダウンロードしないようにしたところエラーも無くなりました。

mysql> select * from onsen_programs where state = 'downloading';
+------+------------------------+--------+---------------------+-----------------------------------------------------+-------------+-------------+-------------+---------------------+---------------------+
| id   | title                  | number | date                | file_url                                            | personality | state       | retry_count | created_at          | updated_at          |
+------+------------------------+--------+---------------------+-----------------------------------------------------+-------------+-------------+-------------+---------------------+---------------------+
| 2359 | 【開発テスト0】        |        | 2014-06-26 00:00:00 | https://onsen-dl.sslcs.cdngc.net/kamo170123Jf6p.mp3 |             | downloading |           0 | 2017-01-25 19:04:10 | 2017-01-25 19:06:12 |
+------+------------------------+--------+---------------------+-----------------------------------------------------+-------------+-------------+-------------+---------------------+---------------------+
1 row in set (0.03 sec)

mysql> update onsen_programs set state = 'not_downloadable' where state = 'downloading';
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from onsen_programs where state = 'downloading';
Empty set (0.02 sec)

ニコ生 新配信対応

公式とコミュニティーの配信が新配信が増えてきたらやりたい
ついでにniconico gemを取り込んでゴチャゴチャしているあたりをフルスクラッチしたい

不定期にradikoの録音に失敗する

時間帯も局も不定なのですが、録音に失敗することがあります。
rec_one の出力はこんな感じです。

rtmpdump は6/12時点のソースをgit cloneしてビルドしています。

E, [2015-06-13T17:00:22.740065 #16306] ERROR -- : rec failed. job:65, exit_status:pid 16323 exit 1, output:RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: No application or playpath in URL!
WARNING: Can't resume live stream, ignoring --resume option
Connecting ...
WARNING: Trying different position for server digest!
INFO: Connected...
ERROR: RTMP_ReadPacket, failed to read RTMP packet body. len: 16354644

AGON-PのHTMLが変わったようでスクレイピングに失敗する

AGON-PremiumのHTMLが変わったようで、新規のスクレイピングが失敗しています。
ruby, nokogiriは私は使ったことがないのであまりきれいじゃないかもしれませんが、パッチはこんな感じです。

    --- lib/agonp/scraping.rb.orig	2017-09-14 14:20:35.971562691 +0900
    +++ lib/agonp/scraping.rb	2017-09-14 14:13:38.902735637 +0900
    @@ -1,3 +1,4 @@
    +# coding: utf-8
     module Agonp
       class Program < Struct.new(:title, :personality, :episode_id, :price)
       end
    @@ -30,24 +31,24 @@
         end
     
         def parse_programs(page)
    -      page.search('.program-list-row').map do |program_row|
    +      page.search('.search-results__data-wrapper').map do |program_row|
             parse_program(program_row)
           end
         end
     
         def parse_program(program_row)
    -      title = program_row.css('.program-list-row-title').first
    -                  .children
    -                  .select {|c| c.text?}
    -                  .reduce('') {|memo, c| c.text}
    -                  .strip
    -      episode_id = program_row.css('a').first.attr('href')
    -                       .match(%r{episodes/view/(\d+)})[1]
    +      title = program_row.css('.search-results__title').first
    +              .children
    +              .inner_text.strip
    +              .sub(/無料\s+/,'')
    +              .sub(/^\s+/,'')
    +              .sub(/\s+$/,'')
    +      episode_id = program_row.css('a').attr('href').text.match(/programs\/view\/(\d+)/)[1]
           Program.new(
               title,
    -          program_row.css('.program-list-row-participants').first.text.strip.gsub('/', ' '),
    +          program_row.css('.search-results__personality').first.text.strip.gsub('/', ' '),
               episode_id,
    -          program_row.css('.program-list-row-price').first.text.strip,
    +          program_row.css('.search-results__price').first.text.strip
           )
         end
       end

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.