2012-02-04 1 views
4

У меня есть следующая функция ниже, которая обычно выплевывает URL-адрес, такой как path.com/p/12345.URI Извлечение в двоеточия, чтобы избежать этого?

Иногда, когда твит содержит двоеточие перед чириканье, таких как

RT: Что-то path.com/p/123

функция будет возвращать:

personName: 
path.com/p/12345 

Моя функция:

$a = 10 

def grabTweets() 
    tweet = Twitter.search("[pic] "+" path.com/p/", :rpp => $a, :result_type => "recent").map do |status| 
    tweet = "#{status.text}" #class = string 
    urls = URI::extract(tweet) #returns an array of strings 
    end 
end 

Моя цель - найти любой твит с двоеточием перед URL-адресом и удалить этот результат из цикла, чтобы он не возвращался к создаваемому массиву.

ответ

3

Вы можете выбрать только HTTP URL сообщений:

URI.extract("RT: Something http://path.com/p/123") 
    # => ["RT:", "http://path.com/p/123"] 

URI.extract("RT: Something http://path.com/p/123", "http") 
    # => ["http://path.com/p/123"] 

Ваш метод может быть очищен совсем немного, у вас есть много лишних локальных переменных:

def grabTweets 
    Twitter.search("[pic] "+" path.com/p/", :rpp => $a, :result_type => "recent").map do |status| 
    URI.extract(status.text, "http") 
    end 
end 

Я также хочу сильно препятствуйте использованию глобальной переменной ($a).

+0

Спасибо. Это сработало хорошо! –

+0

Так просто уточнить, добавив «,» http «» после выписки url. который проверяет, что url, который он извлекает, имеет http в нем, прежде чем он добавит к массиву. Это верно? –

+1

Yup, хотя он проверяет, что это «схема» - это то, что вы проходите, поэтому дело не только в URI. Вы также можете передать ему массив протоколов, например. '[" http "," ftp "]', чтобы включить несколько схем. Обычно я бы сказал, что вы можете прочитать больше в [документации] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html#method-c-extract), но это расстраивает. –

 Смежные вопросы

  • Нет связанных вопросов^_^