1

mechanizeを使用して動作するルビースクリプトを作成しました。

  1. Stackoverflowの評判とバッジ
  2. Twitterのツイートとフォロワー

出力を画面に印刷します。

私は最初にターミナルでこのコマンドを実行します:

/Users/cyclotrojan/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /Users/cyclotrojan/Desktop/Snippets/get_so_reputation_and_tw_followers.rb

出力は、端末に次のように正しく表示されます。

StackOverflow :
    Reputation is : 406
    Total Badges  : 10
Twitter :
    Tweets     : 1,494
    Followers  : 137

ここで、GeekToolsを使用してデスクトップにスクリプトの出力を表示し、更新時間を30分に設定して、スクリプトを何度も実行し続け、統計を更新したいと思います。ただし、同じコマンドをgeektoolシェルに貼り付けると、出力が表示されません。

スクリプトは次のとおりです。

ファイルget_so_reputation_and_tw_followers.rb

require 'mechanize'

def get_stackoverflow_data

  url_so = 'https://stackoverflow.com/users/898346/cyclotrojan'

  begin
    so_page = Mechanize.new.get(url_so)
    so_reputation = so_page.link_with(:href => "/users/898346/cyclotrojan?tab=reputation").to_s
    so_badges = so_page.search(".badgecount").first

    print "StackOverflow :" + "\n"
    print "    Reputation is : " + so_reputation + "\n"
    print "    Total Badges  : " + so_badges + "\n"
  rescue
    print "StackOverflow :" + "\n"
    print "\tReputation is : " + "NA" + "\n"
    print "\tTotal Badges  : " +  "NA" + "\n"
  end

end


def get_twitter_data

  url_tw = 'https://twitter.com/cyclotrojan'

  begin
    tw_page =  Mechanize.new.get(url_tw)
    tw_tweets = tw_page.link_with( :href => "/" + url_tw.split("/").last).to_s.split(" ").first
    tw_followers = tw_page.link_with( :href => "/#!/" + url_tw.split("/").last + "/followers").to_s.split(" ").first

    print "Twitter :" + "\n"
    print "\tTweets     : " + tw_tweets + "\n"
    print "\tFollowers  : " + tw_followers + "\n"
  rescue
    print "Twitter :" + "\n"
    print "\tTweets     : " + "NA" + "\n"
    print "\tFollowers  : " + "NA" + "\n"
  end

end # end function


  get_stackoverflow_data()
  get_twitter_data()

ただし、出力がデスクトップに表示されないだけです。別のファイルtest.rbを使用してテストしたので、問題はルビーの検出にあるのではないことを知っています。

ファイルtest.rb

puts "hello"

このコマンドはGeekToolシェルで機能し、helloを正しく表示します。

/Users/cyclotrojan/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /Users/cyclotrojan/Desktop/Snippets/test.rb;

geektoolシェルでの出力:こんにちは

デバッグを行ったところ、require'mechanize'という行を削除すると、スクリプトが正しく実行され、例外のために次の出力が表示されることがわかりました。

StackOverflow :
    Reputation is : NA
    Total Badges  : NA
Twitter :
    Tweets     : NA
    Followers  : NA

したがって、問題はスクリプトにmechanizeを含めることです。これを解決するのを手伝ってください。Thnx!

これらの質問は役に立ちませんでした: GeektoolでRubyスクリプトを実行する方法は?Ruby、Mac、Geektoolの質問、ファイルアクセス権?

4

1 に答える 1

0

エラーを救おうとしなかったかどうかはわかります。古い友人の ssl 検証エラーのように見えるので、これを試してください:

@agent = Mechanize.new
@agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
tw_page = @agent.get url_tw

OpenSSL::SSL::VERIFY_NONE の結果を理解していることを確認してください。

また、ここにヒントがあります:

tweets = tw_page.at('a[@data-element-term="tweet_stats"] strong').text rescue 'N/A'
followers = tw_page.at('a[@data-element-term="follower_stats"] strong').text rescue 'N/A'
puts "Twitter :" + "\n"
puts "\tTweets     : #{tweets}"
puts "\tFollowers  : #{followers}"
于 2012-08-08T11:52:24.460 に答える