Я создаю клон Twitter в Ruby On Rails, как мне его кодировать, чтобы '@ ...' в 'твитах' превращались в ссылки? - PullRequest
3 голосов
/ 09 января 2010

Я в некоторой степени новичок в Rails, так что терпите меня, у меня есть большая часть приложения, за исключением этой части.

Ответы [ 7 ]

5 голосов
/ 10 января 2010
def linkup_mentions_and_hashtags(text)    
  text.gsub!(/@([\w]+)(\W)?/, '<a href="http://twitter.com/\1">@\1</a>\2')
  text.gsub!(/#([\w]+)(\W)?/, '<a href="http://twitter.com/search?q=%23\1">#\1</a>\2')
  text
end

Я нашел этот пример здесь: http://github.com/jnunemaker/twitter-app

Ссылка на вспомогательный метод: http://github.com/jnunemaker/twitter-app/blob/master/app/helpers/statuses_helper.rb

0 голосов
/ 10 января 2010

Я тоже работал над этим, я не уверен, что он на 100% идеален, но, похоже, работает:

  def auto_link_twitter(txt, options = {:target => "_blank"})
    txt.scan(/(^|\W|\s+)(#|@)(\w{1,25})/).each do |match|
      if match[1] == "#"
        txt.gsub!(/##{match.last}/, link_to("##{match.last}", "http://twitter.com/search/?q=##{match.last}", options))
        elsif match[1] == "@"
          txt.gsub!(/@#{match.last}/, link_to("@#{match.last}", "http://twitter.com/#{match.last}", options))
          end
    end
    txt
  end

Я собрал его вместе с поиском в Google и чтением по String.scan в API документации.

0 голосов
/ 09 января 2010

Вы бы использовали регулярное выражение для поиска @username, а затем превратили бы его в соответствующую ссылку.

Я использую следующее для @ в PHP:

$ret = preg_replace("#(^|[\n ])@([^ \"\t\n\r<]*)#ise", 
                    "'\\1<a href=\"http://www.twitter.com/\\2\" >@\\2</a>'", 
                    $ret);
0 голосов
/ 09 января 2010

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

Это регулярное выражение даст вам слова, начинающиеся с @ символов, но вам, возможно, придется настроить его:

\@[\S]+\
0 голосов
/ 09 января 2010

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

Regex.Replace("this is an example @AlbertEin", 
                    "(?<type>[@#])(?<nick>\\w{1,}[^ ])", 
                    "<a href=\"http://twitter.com/${nick}\">${type}${nick}</a>");

Этот пример вернет

this is an example <a href="http://twitter.com/AlbertEin>@AlbertEin</a>

Если вы запускаете его в .NET

Регулярное выражение (?<type>[@#])(?<nick>\\w{1,}[^ ]) означает, запишите и назовите его TYPE - текст, начинающийся с @ или #, а затем запишите и назовите его NAME - текст, который следует за ним, содержит как минимум один текстовый символ, пока вы не найдете пробел. 1010 *

0 голосов
/ 09 января 2010

Вы можете использовать регулярное выражение для поиска @sometext {whitespace_or_endofstring}

0 голосов
/ 09 января 2010

Возможно, вы могли бы использовать регулярные выражения для поиска "@ ..." и затем заменить совпадения соответствующей ссылкой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...