1

restclient gem を使用して、最後の 3200 のツイートを 200 のグループ (複数のページ) でダウンさせようとしています。

その過程で、次の行をファイルに複数回追加することになります。

</statuses>
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">

これを正しく行うには (XML の解析がトスになるため)、ファイルをダウンロードした後、最初の文字列を除いて、上記の文字列のすべての出現箇所を置き換えたいと考えています。私は次のことを試みています:

 tweets_page = RestClient.get("#{GET_STATUSES_URL}&page=#{page_number}")
      message = <<-MSG
</statuses>
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
MSG
      unless page_number == 1
       tweets_page.gsub!(message,"")
     end

上記の何が間違っていますか?同じことを行うより良い方法はありますか?

4

1 に答える 1

0

一度にまとめをダウンロードして、応答の本文をメッセージごとに分割し、最初のエントリに追加する方が速いと思います。このようなものは試してみることができないので、これを単なるアイデアと考えてください。

tweets_page = RestClient.get("#{GET_STATUSES_URL}").body
tweets = tweets_page.split(message)
tweets_page = tweets[0]+message+tweets[1..-1]

あなたはそれらを200のグループに簡単に分割することもできます

テキスト全体にgsubを使用してそれを実行したい場合は、次を使用できます。

tweets_page = <<-MSG
first
</statuses>
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
second
</statuses>
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
rest
MSG

message = <<-MSG
</statuses>
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
MSG

new_str = tweets_page.gsub message do |match|
  if defined? @first
    ""
  else
    @first = true
    message
  end
end

p new_str

与える

type=\"array\">\nrest\n"
"first\n</statuses>\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<statuses type=\"array\">\nsecond\nrest\n"
于 2012-06-12T19:20:11.253 に答える