Ruby

RubyでWebブラウザを操作するツール(知識更新のため

はじめに 過去の人 @riocampos ですw Ruby で動的なサイトの Web スクレイピングをするときに、Selenuim をラップした Watir を使って動的なHTMLを取得していました。Selenium だと低水準なところに気を遣わないといけないのですが、Watir はうまく Rubyish …

radirudegogaku0.rb更新(2022/05)

ごあいさつ こんにちは。gogakuondemand.rb および radirudegogaku.rb 作者の @riocampos です。またまたご無沙汰しております。 更新内容 今回の更新はNHK側仕様変更(?)に対する更新です。 NHK語学講座のらじる★らじる聴き逃しサービスを取得するRubyス…

radirudegogaku0.rb更新(2021/10)

ごあいさつ こんにちは。gogakuondemand.rb および radirudegogaku.rb 作者の @riocampos です。またまたご無沙汰しております。 更新内容1 今回の更新は NHK語学講座のらじる★らじる聴き逃しサービスを取得するRubyスクリプトradirudegogaku.rb(2020/4/2暫…

NHK語学講座のらじる★らじる聴き逃しサービスを取得するRubyスクリプトradirudegogaku.rb(2023/04)

2023年度対応 基本的に昨年度と変化がありませんでしたので更新してません(ただし英語以外の「まいにち○○語」は入門編から初級編へと名称変更(?)されていました。が ID は同一です。) 【緊急】2022/05時点のNHK語学講座ダウンロード不調に関して コメン…

Watirを使う際にChromeDriverを自動的にインストールさせるrubygem webdrivers

自動化したいよね ChromeDriver は Chrome のバージョンと合わせておく必要があり、合わないとエラーが出ます。しかし Chrome はしょっちゅう更新されていきますし、しかもタイミングによっては(なぜか)ChromeDriver のほうが先に更新されてしまって結果と…

Rubyで末尾に=が付くメソッドは「属性参照」と呼ぶらしい(英語だとAssignment Methods)

ruby で =()がついたメソッドを理解する - Qiita のコメントを書いたときに Ruby のリファレンスマニュアルを見直していました。Ruby 的にはどうやら「属性参照」と呼ぶらしいです(仮称のようにも感じますが)。ちなみに英語マニュアルだと Assignment Meth…

gogakuondemand.rbをv1804_1に更新

すみません、今回はデバッグのための更新です。NHKのせいではありません…。 それから、基礎英語0のストリーミングサイトが他の番組と若干異なっております。そのため、もしかすると5月に再度更新するかもしれません。 と書いておりましたが、5月に変わったら…

gogakuondemand.rbをv1804に更新

NHK大好きな[twitter:@riocampos]です。 毎度おなじみ gogakuondemand.rb を更新しました。 今回は年度変更に伴う番組変更への対応を行いました。具体的には 短期集中!3か月英会話 削除 基礎英語0 追加 遠山顕の英会話楽習 追加 以上の3番組への対応です。…

WatirでHeadless Chromeを使うまでのメモ

サーバ的環境から JavaScript が必要なブラウザアクセスする場合はいままでずっと PhantomJS を使ってきたわけですが、残念ながら PhantomJS は2017年6月ごろで開発を終了したそうです*1。 ということで遅まきながら Headless Chrome を使ってみることにしま…

NHKラジオニュースサイトの音声ファイルのありか

最近 Amazon Echo Dot を入手して遊んでいる @riocampos です。 Amazon Echoでニュースを聞く Echo Dot へ向かって「Alexa、ニュース」と言うと NHK ラジオニュースの最新ニュースを流し、そのあとに天気予報を喋ってくれます。便利です。 さて、そのニュー…

Web上の画像を付けてツイート(1つ・複数)Twitter gemバージョン6.2.0以降の場合

Twitter gem バージョン6.2.0は去る2017年の11/8リリースなのですが、昨日までこの変更に気付いてませんでした(ずっと6.1.0以前を使ってたのさ…)。 さて、以前の記事(Web上の画像を付けてツイート(1つ・複数) - 別館 子子子子子子(ねこのここねこ))…

gogakuondemand.rbをv1704_3に更新

NHK大好きな[twitter:@riocampos]です。 毎度おなじみ gogakuondemand.rb を更新しました。 今回の更新は「短期集中!3か月英会話」のストリーミングURL変更への対応です。 このコメントを頂いたので更新しました。 □ tamatama 2017/10/30 11:37 短期集中3…

gogakuondemand.rbをv1704_2に更新

NHK大好きな[twitter:@riocampos]です。 毎度おなじみ gogakuondemand.rb を更新しました。 今回の更新は「短期集中!3か月英会話」のストリーミングURL変更への対応です。 このコメントを頂いたので更新しました。 □ tama 2017/07/17 13:33 短期集中3か月…

らじる★らじる聴き逃しサービスをダウンロードするための手始め:JSONファイルのありか

更新しました → らじる★らじる聴き逃しサービスをダウンロードするための手始め:JSONファイルのありか(その2) - 別館 子子子子子子(ねこのここねこ)はてブロ部 おことわり ここに記載した情報は、私的利用に限定した使用に限ります*1。著作権侵害は禁じ…

gogakuondemand.rbをv1704に更新

NHK大好きな[twitter:@riocampos]です。 gogakuondemand.rb を久しぶりに更新しました。バージョン名は今回から年度と月名にしました。 今回の更新はNHK語学講座の変更に伴う対応です。 追加講座 ボキャブライダー(注意:v1704_1にて対応) 高校生からはじ…

RMagickメモ

なんとなく書くことにしました。 画像は8x8 bit の画像ファイル z.png(32倍に拡大してます)↓ を使います。 読み込み > require 'RMagick' > img_z = Magick::ImageList.new('z.png') > # または img_z = Magick::Image.read('z.png') ImageとImageListの違…

Threadの同時実行数を指定するには

Queue を使えば簡単です。また SizedQueue でもできます。 シンプルに 標準添付ライブラリのQueueを使えばこれらの処理がサクッと実装できちゃいます。 require 'thread' locks = Queue.new 2.times { locks.push :lock } Array.new(10) do |i| Thread.new d…

ラジ録2で録った「らじる★らじる」flvファイルをまとめてmp3に変換する その2

ラジ録2で録った「らじる★らじる」flvファイルをまとめてmp3に変換する - 別館 子子子子子子(ねこのここねこ) というのを3年ほど前に書きましたが、そのまま放置していました。 ふと、サーバに入っているflvファイルをまとめて変換してしまおう、と思い立…

元ファイルの変更日/追加日を別ファイルにコピー

某ソフトでNHKラジオを録音しているのだけど、一時期だけ設定ミスをして番組後も5時間ほど録音してしまったことが。ということで15分(+30秒)に切る Ruby スクリプトを書いてみた。 そのときに、切り取った後のファイルの変更日/追加日を元のファイルと同じ…

Anemone gemでのクロールメモ

Web サイトをクロールしたいことが出てきたので、 Anemone で行うのが基本なのだろうと思い、少し調べていました。 するとRubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例作者: 佐々木拓郎,るびきち出版社/メーカー: SBクリエイティブ発売日…

Arrayを返すEnumerableモジュールのメソッドはeach_with_objectで書ける(while系を除く)

ということに気付いたのでメモ*1。 これを頭に入れておくと「ああ、これ select に似てるのに、返値にレシーバから以外の要素を入れたいから select じゃ書けない…>_each_with_object で書けば良いんだ」とササっと書ける(のではないかなと思った)。 ちな…

Pathnameクラスでファイル情報を得るには

Pathname#stat メソッドを使います。 File::Stat クラスを返します。 > file = Pathname.new('test.mp4') => #<Pathname:test.mp4> > file.stat => #</pathname:test.mp4>

IO.popenメソッドで標準エラー出力を取得するには

結論:IO.popenで標準エラー出力を取得するオプション ぐだぐだ長いので、求めているものを先に示しておきます。 IO.popen(command, :err => [:child, :out]) IO.popen(command, :err => [:child, :out]) { |pipe| … } 前置き まず先日書いた記事の引用を(…

Herokuのappを二つ使って交互起動で常時運用(Rack版)

この記事は2016/5/31までの内容です。 Herokuのappを二つ使って交互起動で常時運用(Sinatra版) - 別館 子子子子子子(ねこのここねこ) では Sinatra で交互起動させましたが、大したこともしてないので Sinatra を動かすほどでもない気がしてきました。と…

Herokuのappを二つ使って交互起動で常時運用(Sinatra版)

この記事は2016/5/31までの内容です。 Twitter bot の運用に heroku を使っている [twitter:@riocampos] です。Web app はあまり使っていません。 Heroku free dynoがとうとう24x7じゃなくなったorz - Qiita でも記載しましたが、 Free dyno だと18時間起動/…

Sinatra内でloopなど定期作業を行うには

単純に Thread.start でスレッドを分けるんですけどね。重要なのはいつものイディオムだと問題が生じる、ということ。 ひとまず結論を先に示します。 クラシックスタイル require 'sinatra' Thread.start do loop do puts Time.now sleep 3 end end get '/up…

urlが存在するか確認するメソッド

元は!url.nil? && !url.empty?だけだったメソッドに、応答コードが200かどうかの部分を追加。 require 'net/http' def url_exist?(url) code = ->(url) { uri = URI.parse(url) Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) }.code } !…

PhantomJSとSelenium/Watirを使っているherokuでgit push heroku masterするとConnection refusedエラーが出てウザイ

こんな感じのエラーが出てログを圧迫する Cycling のときや push のときに Connection refused - connect(2) for "127.0.0.1" port 8910 (Errno::ECONNREFUSED) というエラーが出ます(なおポート番号は違う場合もあります)。 Nov 29 22:29:40 app-test her…

Watirでクリック後の更新を待つ

Watir-Webdriverでリンクなどをクリックした後に、更新されるのを sleep して待っていたのですが、ちゃんと更新を確認出来るメソッドがありました(当然ですよね ブロック内が真/偽になるまで待機する、というメソッドです。 (なお PhantomJS で ReactJS の…

外部処理に同期するための上限回数あり繰り返しメソッド

タイトル通りですね。処理を外部処理にしておけば同期が可能になります。処理を実行し、その結果を判断する、というブロックをメソッドに渡します。まず pre_sleep 秒だけスリープして遅延し、ブロックが false を返すと return(return if execution.call …