2013-06-03 1 views
1
page = HTTParty.get("https://api.4chan.org/b/0.json").body 
threads = JSON.parse(page) 
count = 0 

unless threads.nil? 
    threads['threads'].each do 
     count = count + 1 
    end 
end 


if count > 0 
    say "You have #{count} new threads." 
    unless threads['posts'].nil? 
     threads['posts'].each do |x| 
     say x['com'] 
     end 
    end 
end 

if count == 0 
    say "You have no new threads." 
end 

по какой-то причине он говорит, что сообщения пустые, я думаю, но нити никогда не ... Я не уверен, что случилось, и он делает то же самое для меня на плагине facebook, но который работал вчера, а теперь ничего. Я делаю что-то неправильно?выпуск с JSON разбор в рубине

ответ

1

Вам необходимо инициализировать threads переменные так:

threads = JSON.parse(page)['threads']

Корневой узел в ответ JSON вы получили «нить». Весь контент, который вы хотите получить, содержится в массиве этого узла.

В каждом thread содержится много posts. Таким образом, чтобы перебрать все должности, вам нужно будет сделать что-то вроде этого:

threads.each do |thread| 
    thread["posts"].each do |post| 
    puts post["com"] 
    end 
end 

В целом я бы переписать код так:

require 'httparty' 
require 'json' 

page = HTTParty.get("https://api.4chan.org/b/0.json").body 
threads = JSON.parse(page)["threads"] 
count = threads.count 

if count > 0 
    puts "You have #{count} new threads." 
    threads.each do |thread| 
    unless thread["posts"].nil? 
     thread["posts"].each do |post| 
     puts post["com"] 
     end 
    end 
    end 
else 
    puts "You have no new threads." 
end 
+0

Спасибо! Это сработало – user2446537