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 回答