1

我正在尝试编写一个 Jekyll 扩展,它将嵌入来自 Blogger 博客的评论。
我能够以 JSON 格式获取评论提要,并对其进行足够的处理以提取评论总数。但是,我还没有弄清楚如何处理提要中的每条评论。

json_url = "http://www.blogger.com/feeds/8505008/593465383646513269/comments/default/?alt=json"
json_rep = Net::HTTP.get_response(json_url)
json_rep = JSON.parse(json_rep.body)
json_rep['feed']['openSearch$totalResults']['$t'] # => "4"
json_rep['feed']['entry'].class # => Array

json_rep['feed']['entry'].length
# => Liquid Exception: undefined method `length' for nil:NilClass in post

这是我第一次用 Ruby 编写任何代码。我究竟做错了什么?

这是我试图解析的 JSON 的相关部分。

{
  "feed": {
    "openSearch$totalResults": {
      "$t": "4"
    },
    "entry": [
      {
        "id": {
          "$t": "tag:blogger.com,1999:blog-8505008.post-491866073982779922"
        },
        "published": {
          "$t": "2013-01-08T15:23:47.322-04:00"
        },
        "content": {
          "type": "html",
          "$t": "Recently, my sister has updated it more than I have. \u00dcber-fail on my part. :p"
        }
      }
    ]
  }
}
4

1 回答 1

1

这是你应该做的事情:

require 'rubygems'
require 'json'
require 'net/http'
require 'net/https'
require 'uri'

url = "http://www.blogger.com/feeds/8505008/593465383646513269/comments/default/?alt=json"
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)

json_rep = JSON.parse(response.body)

puts json_rep['feed']['openSearch$totalResults']['$t']

entries = json_rep['feed']['entry']
entries.each do |entry|
    puts entry["id"]["$t"]
    #add what ever code you like here
end 

这输出:

4
tag:blogger.com,1999:blog-8505008.post-491866073982779922
tag:blogger.com,1999:blog-8505008.post-4792479891671746788
tag:blogger.com,1999:blog-8505008.post-4766604955439002209
tag:blogger.com,1999:blog-8505008.post-5484003770204916000
于 2013-04-12T17:21:59.587 回答