4

私がオタクの能力を「ロマンチック」にするときに妻はそれを楽しんでいるので、私はルビースクリプトを彼女のMacにインストールして、一日中彼女の引用と小さなメモを送るというアイデアを思いつきました。GeekToolを使用してバックグラウンドでスクリプトを実行し、growlnotifyを使用してメッセージを表示することはすでに理解しています。今必要なのは、スクリプトを変更した場合に備えて、Webからスクリプトを更新する方法です。私は基本的に、コンソールとの対話方法以外はルビーについて何も知りません。

私には2つの目標があります:1)メッセージを含むXMLファイルを用意します。これはインターネットから更新可能である必要がありますが、彼女がネットワーク接続を持っていない場合に備えてローカルである必要があります。2)バグを見つけたり、改善したい場合に備えて、インターネットからスクリプト自体を更新します。

必要に応じて、彼女のMacでスクリプトを手動で更新できることは明らかですが、これは、より高度なルビーを学ぶための良い方法だと思いました。

優先度1はXMLファイルであり、変更された場合は新しいバージョンをダウンロードできます。ファイルをダウンロードしてローカルの特定の場所に保存するために使用できるルビーのものは何ですか?

私は以前にhpricotを使用したことがありますが、それは良い方法でしょうか?

注:私の妻のMacは、Leopardを実行しているMacbookです(ただし、10.4である可能性があり、100%確実ではありません)。

編集

スクリプトの最初のバージョンに興味がある人は、ここで見つけることができます

ps->スクリプトの最初のバージョンは実際には更新されません。messages.xmlファイルを更新するだけで、それだけです。

4

3 に答える 3

1
require 'net/http'

Net::HTTP.start("your.webhost.com") { |http|
  resp = http.get("/messages/messages.xml")
  open("messages.xml", "wb") { |file|
    file.write(resp.body)
  }
}

そのようなものが機能するはずです。Rubyスクリプトをダウンロードして、呼び出すこともできます。

exec("ruby script2.rb")
#no further lines in script1 will execute
于 2009-12-07T15:22:21.340 に答える
1

1日を通してランダムに来るxmlメッセージを含むファイルがある場合、あなたの妻はあなたが来るのを見ませんか?あなたがメッセージを送って、彼女がそれをすぐに受け取るのは良いことではないでしょうか?

XMPPプロトコルを使用してこれを行うことができます。
妻のアプリケーションは、それ自体をXMPPサーバーに接続します。君も。そして、あなたはいつでも彼女にメッセージを送ることができます。
メッセージのそれぞれの間にある程度の距離を置いてメッセージを強制的に送信することもできます。
したがって、彼女がインターネット接続なしで遊牧民になり、あなたがそれを知っているとき、あなたは事前に彼女に3つか4つのメッセージを送ります。そして、彼女は後でそれらを受け取ります。

スクリプトの更新の場合、これは他のWebサイトサーバーで発生する問題と同様の問題です。
そこで、彼女のマシンでSSHポートを開き、capistranoを使用して最新バージョンのアプリケーションをデプロイしました。

于 2009-12-07T16:10:51.153 に答える
0

メッセージの長さはどれくらいですか?XMLが短い場合、XMLは少しやり過ぎかもしれません。1行に1つのメッセージを含むテキストファイルを使用しないのはなぜですか?

#!/usr/bin/env ruby
require 'open-uri'

def growl_msg(msg)
  %x{growlnotify -m "#{msg}"}
end

def read_msg
  begin
    f = open("http://www.yoursite.com/messages.txt").read
    File.open("messages.txt", 'w') {|f| f.write(f) } #write local copy
  rescue
    f = File.open("messages.txt").read
  end
  growl_msg(f.split("\n").sort_by{rand}[0]) #growl a random line
end

while true do
  read_msg
  sleep(15*60) # 15 minutes between messages
end

GeekToolを使用してスクリプトを実行することもおそらく必要ありません。でスクリプトを開始するだけでnohup myscript.rb、プロセスを強制終了するまでスクリプトが実行され続けます。

于 2009-12-08T07:40:16.900 に答える