Используйте рубиновую механизацию для получения данных из foursquare - PullRequest
2 голосов
/ 14 сентября 2011

Я пытаюсь использовать ruby ​​и Mechanize для анализа данных на сайте foursquare. Вот мой код:

require 'rubygems'
require 'mechanize'

agent = Mechanize.new
page = agent.get('https://foursquare.com')
page = agent.click page.link_with(:text => /Log In/) 
form = page.forms[1] 
form.F12778070592981DXGWJ = ARGV[0]
form.F1277807059296KSFTWQ = ARGV[1]
page = form.submit form.buttons.first
puts page.body

Но затем, когда я запускаю этот код, всплыла следующая ошибка:

C:/Ruby192/lib/ruby/gems/1.9.1/gems/mechanize-2.0.1/lib/mechanize/form.rb:162:in
`method_missing': undefined method `F12778070592981DXGWJ=' 
for #<Mechanize::Form:0x2b31f70> (NoMethodError)
    from four.rb:10:in `<main>'

Я проверил и обнаружил, что эти две переменные для объекта формы "F12778070592981DXGWJ" и "F1277807059296KSFTWQ" меняются каждый раз, когда я пытаюсь открыть веб-страницу foursquare.

У кого-нибудь была такая же проблема раньше? ваши переменные меняются каждый раз, когда вы пытаетесь открыть веб-страницу? Как мне решить эту проблему?

Наш проект о разборе данных на foursquare. Поэтому я должен иметь возможность войти в систему в первую очередь.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Механизация полезна для сайтов, которые не предоставляют API, но Foursquare уже имеет установленный REST API .Я бы рекомендовал использовать одну из библиотек Ruby , возможно foursquare2 .Эти библиотеки абстрагируют такие вещи, как аутентификация, поэтому вам просто нужно зарегистрировать ваше приложение и использовать предоставленные ключи.

2 голосов
/ 14 сентября 2011

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

form.fields[0].value = ARGV[0]
form.fields[1].value = ARGV[1]
...

Однако, как сказал dwhalen, использование REST API, вероятно, намного лучший способ. Вот почему он там.

...