hakeの日記

Windows環境でプログラミングの勉強をしています。

yahoonewsTTR - ネット接続を確実に

ヤフーニュース取得ソフトyahoonewsTTRがVer.0.9.0にアップデートしました。
今回の変更点は

  • コマンドラインから自動取得できるように修正。
  • 画像ファイルの読み出しを絶対パスから相対パスに変更。
  • 新規導入時に階層指定文字が空欄になってしまうバグを修正。


コマンドラインからの自動取得する機能は良いですよね、定時に自動でのニュースの取得が行いやすくなりました。特にupdownオプションはネット接続中か否かを気にせずに実行できるのでポイント高いですね。


で、試してみたのですが、私の環境(無線LAN)でネットの自動接続を行わせると、なぜか接続完了した後でnetwork errorになって記事の取得に失敗することが多いですね、前のバージョンでは起こらなかったのですけど。
そこでRubyの勉強がてらソースを少しいじらせてもらいました、ついでにネット接続が失敗してもリトライするようにもしてみました。例によってRubyはちゃんと理解してないのでかなり怪しいですけどなんとか動作してるみたいです(^^;


通信が確立しているかの判断は、さきらさんのcron_inet.rbを参考にさせていただきました(っていうか、ほとんどそのままです)


まず、online?メソッド(っていうんですか?)をgetyahooの上に追加

   def online?
      if (/^0\.0\.0\.0\s+([^\s]+)\s/ =~ `/sbin/route -n| /bin/grep "^0.0.0.0"`) then
         ip = "www.yahoo.co.jp"
         #ip = $1

         ping_str = `ping -c 3 #{ip}`
         if (/time=/ =~ ping_str) then
            return true
         end
      end
      false
   end

つぎにgetyahooの接続処理部分をコメントアウトして置き換え、systemでqcopコマンド実行させるのにbegin〜endで囲まないと上手く動作しないのは何故だろう?

      if ( ($n1m =~ /true/)  != nil ) | ($netop =~ /up/) then
         @e1.setText(QString::fromUtf8("接続確認"))
         if ( online? ) then
            if ($netop =~ /down/) then
               $netop = "up"
            end
         else
            @e1.setText(QString::fromUtf8("接続待ち"))

            while ( !online? ) do
               @e1.setText(QString::fromUtf8("接続中"))
               begin
                  system("qcop QPE/Network 'connectRequest(QString,QString)'")
               rescue
               end
               sleep 25
            end
            @e1.setText(QString::fromUtf8("接続完了"))
         end
      end


#      begin
#         if ( ($n1m =~ /true/) != nil ) | ( ($netop =~ /up/) )then
#            system("qcop QPE/Network 'connectRequest(QString,QString)'")
#         end
#      rescue
#      end
#
#
#      if ( ($n1m =~ /true/)  != nil ) | ($netop =~ /up/) then
#         begin
#            @e1.setText(QString::fromUtf8("接続確認"))
#             open("http://img.yahoo.co.jp/images/clear.gif") do |f|
#            end
#            if ($netop =~ /down/) then
#               $netop = "up"
#            end
#         rescue
#            @e1.setText(QString::fromUtf8("接続待ち"))
#            sleep 21
#         end
#      end