Хобрук: Ваш путь к мастерству в программировании

RubyOnRails: Как заставить задачу rake анализировать Twitter JSON?

Я пытаюсь написать задачу rake для анализа файла, содержащего множество обновлений Twitter в формате json.

JSON-файл выглядит так:

{ "_id" : { "$oid" : "50f82aeab4aa879861000000" }, "text" : "Golden Globes, lots of fashion messes...but glad Argo won. Really good movie, along w Moonrise Kingdom and Salmon Fishing Yeman.", "created_at" : { "$date" : 1358137508000 }, "id" : 290675893024747523, "user" : { "screen_name" : "Dpharmakis23", "id" : 852045842 } }
{ "_id" : { "$oid" : "50f82aeab4aa879861000001" }, "text" : "RT @RPLife: 2 Red Carpet HQs added and maybe my favorites of the night http://t.co/Fiq08m7i", "created_at" : { "$date" : 1358137507000 }, "id" : 290675892668211203, "user" : { "screen_name" : "dri_violet", "id" : 88925839 } }
{ "_id" : { "$oid" : "50f82aeab4aa879861000002" }, "text" : "After watching the Golden Globes it made me want to watch Les Mis again. It's gonna be a late night tonight.", "created_at" : { "$date" : 1358137507000 }, "id" : 290675892416573440, "user" : { "screen_name" : "JessBess4", "id" : 273137370 } }
{ "_id" : { "$oid" : "50f82aeab4aa879861000003" }, "text" : "I'm pretty how I've felt during the Golden Globes is how most of my followers feel during a NASCAR race/football game. #TweetOverload", "created_at" : { "$date" : 1358137507000 }, "id" : 290675892311715840, "user" : { "screen_name" : "JordanTMcGraw", "id" : 25172777 } }
{ "_id" : { "$oid" : "50f82aeab4aa879861000004" }, "text" : "RT @LaAbuela961: Hay personas que solo compran ropa en Jacarandas pero se pasaron criticando los vestuarios de los famosos en los Golden Globes. #NoMeJodan", "created_at" : { "$date" : 1358137507000 }, "id" : 290675892278157313, "user" : { "screen_name" : "silvita_hdez", "id" : 269487031 } }


Что я хочу сделать, так это проанализировать каждую из этих записей в моей модели "tweets", которая в схеме выглядит следующим образом:

create_table "tweets", :force => true do |t|
  t.integer  "tid"
  t.datetime "created_at", :null => false
  t.text     "text"
  t.string   "user_name"
  t.integer  "user_id"
  t.datetime "updated_at", :null => false
end


Данные из твиттера JSON должны попасть в мою таблицу следующим образом:

  • _id.user.screen_name -> Tweet.user_name
  • _id.user.id -> Твит.user_id
  • _id.text -> Твит.текст
  • _id.created_at -> Tweet.created_at
  • _id.id -> Tweet.tid


Задача rake, которую я написал до сих пор, выглядит следующим образом:

require 'multi_json'

namespace :db do
  task :import_tweets => :environment do
    File.open('/omittedPath/5tweets.json', 'r') do |file|
      file.each do |line|
        attrs = JSON.parse line
        twt = Tweet.find_or_initialize_by_identifier(attrs[2])
        twt.save!
      end
    end
  end
end


Когда я попытался разобрать json твиттера в консоли rails, я выполнил команду:

JSON.parse { "_id" : { "$oid" : "50f840c2b4aa879ae4000d5d" }, "text" : "Nanananana BATMAN! Christian Bale is presenting now. #GoldenGlobes", "created_at" : { "$date" : 1358134191000 }, "id" : 290661983240454144, "user" : { "screen_name" : "egbrown27", "id" : 377696330 } }

но ответ, который я получил, был

SyntaxError: (irb):11: syntax error, unexpected ':', expecting '}'
JSON.parse { "_id" : { "$oid" : "50f840c2b4aa879a...
                ^
(irb):11: syntax error, unexpected ':', expecting tASSOC
...JSON.parse { "_id" : { "$oid" : "50f840c2b4aa879ae4000d5d" }...
...                               ^
(irb):11: syntax error, unexpected ',', expecting $end
...: "50f840c2b4aa879ae4000d5d" }, "text" : "Nanananana BATMAN!...


Любая помощь будет принята с благодарностью. Благодарю вас!


Ответы:


1

Вы должны передать строку JSON.parse. Попробуй это:

JSON.parse '{ "_id" : { "$oid" : "50f840c2b4aa879ae4000d5d" }, "text" : "Nanananana BATMAN! Christian Bale is presenting now. #GoldenGlobes", "created_at" : { "$date" : 1358134191000 }, "id" : 290661983240454144, "user" : { "screen_name" : "egbrown27", "id" : 377696330 } }'

Он вернет проанализированный хэш:

{"_id"=>{"$oid"=>"50f840c2b4aa879ae4000d5d"}, "text"=>"Nanananana BATMAN! Christian Bale is presenting now. #GoldenGlobes", "created_at"=>{"$date"=>1358134191000}, "id"=>290661983240454144, "user"=>{"screen_name"=>"egbrown27", "id"=>377696330}}
04.02.2013
  • Ты человек! Спасибо. Можете ли вы сказать мне, как получить доступ к каждому аргументу проанализированных данных? делать line._id или line[1] , как я пытался, явно неправильный путь. 04.02.2013
  • Изменил код на :: do |file| \ file.each do |line| \ tweet_attrs = JSON.parse line \ Tweet.create! tweet_attrs \ end \ end но получаю ошибку Can't mass-assign protected attributes: _id, id, user 04.02.2013
  • Мне также нужно было добавить эту строку - требуется json 13.06.2014
  • Новые материалы

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..