使用Ruby Gem for Twitter获取Hashtag的搜索结果

问题描述 投票:0回答:1

我正在尝试使用此Twitter gem与Twitter连接并返回所有具有特定主题标签的推文列表。截至目前,我已经能够连接到API并返回数据,所以我知道连接正常。我已经阅读了文档,我只是不了解如何实现我所看到的。我真的很擅长连接和使用API​​,我们真的很感激一些澄清。这是我到目前为止的代码。

的Gemfile

#####################
### My Added Gems ###
#####################

# Define Ruby Version
ruby "2.5.0"

# Social Connections
gem 'twitter'

# ENV Variables
gem 'dotenv-rails'

视图/页/ home.html.erb

<h1>Tweets</h1>
<% @tweets.each do |tweet| %>
  <%= tweet.full_text %>
  <br>
<% end %>

控制器/ pages_controller.rb

class PagesController < ApplicationController
  require 'twitter'

  def home
    client = Twitter::REST::Client.new do |config|
      config.consumer_key        = ENV.fetch("YOUR_CONSUMER_KEY")
      config.consumer_secret     = ENV.fetch("YOUR_CONSUMER_SECRET")
      config.access_token        = ENV.fetch("YOUR_ACCESS_TOKEN")
      config.access_token_secret = ENV.fetch("YOUR_ACCESS_SECRET")
    end

    @tweets = client.user_timeline('trendingfaith', count: 20)

  end
end

这将打印出用户@TrendingFaith的推文列表。

我试图用#TrendingFaith标签打印所有推文:

pages_controller.rb

class PagesController < ApplicationController
  require 'twitter'

  def home
    tweets = Twitter::REST::Search.new do |config|
      config.consumer_key        = ENV.fetch("YOUR_CONSUMER_KEY")
      config.consumer_secret     = ENV.fetch("YOUR_CONSUMER_SECRET")
      config.access_token        = ENV.fetch("YOUR_ACCESS_TOKEN")
      config.access_token_secret = ENV.fetch("YOUR_ACCESS_SECRET")
    end
    @tweets = tweets.search(q, options = {:hash => 'trendingfaith'}) ⇒ Twitter::SearchResults

  end
end

得到以下错误:syntax error, unexpected tIDENTIFIER, expecting keyword_end

我尝试通过this doc on the Twitter GemTwitter API docs阅读。我现在无法理解它如何实现它。非常感谢任何指导。

更新:收到答复后的工作代码

根据@SimonFranzen的回答,我缺少的代码是client.search('#SpecificTag')语法来搜索特定的主题标签。

这是我的代码现在的样子:

控制器/ pages_controllers.rb

class PagesController < ApplicationController
  require 'twitter'

  def home
    tweets = Twitter::REST::Client.new do |config|
      config.consumer_key        = ENV.fetch("YOUR_CONSUMER_KEY")
      config.consumer_secret     = ENV.fetch("YOUR_CONSUMER_SECRET")
      config.access_token        = ENV.fetch("YOUR_ACCESS_TOKEN")
      config.access_token_secret = ENV.fetch("YOUR_ACCESS_SECRET")
    end
    @tweets = tweets.search('#TrendingFaith')
  end
end

我在这上面运行了byebug,并且能够通过此搜索查看从Twitter返回的数据。 (请参阅下面的哈希数据),因此可以像这样更新我的视图:

视图/页/ home.html.erb

<h1>TrendingFaith.org - Coming Soon</h1>
<% @tweets.each do |tweet| %>
  User @<%= tweet.user.screen_name %> said: "<%= tweet.text %>" on <%= tweet.created_at.strftime('%-m/%d/%Y') %>
  <br>
<% end %>

这能够提取Twitter用户的名字,推文的文本以及推特时的推文。这正是我所寻找的。

Twitter哈希被归还给我,放在这里供其他可能想知道的人。此外,您可以在页面底部see it here in their documentation

{
  :created_at=>"Sun Mar 04 18:20:42 +0000 2018", 
  :id=>970363418858332160, 
  :id_str=>"970363418858332160", 
  :text=>"A place where you can find things trending in the Christian faith. Questions and stories. #TrendingFaith", 
  :truncated=>false, 
  :entities=>
    {
      :hashtags=>[{
        :text=>"TrendingFaith", 
        :indices=>[90, 104]
      }], 
      :symbols=>[], 
      :user_mentions=>[], 
      :urls=>[]
    }, 
  :metadata=>
    {
      :iso_language_code=>"en", 
      :result_type=>"recent"
    }, 
  :source=>"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>", 
  :in_reply_to_status_id=>nil, 
  :in_reply_to_status_id_str=>nil, 
  :in_reply_to_user_id=>nil, 
  :in_reply_to_user_id_str=>nil, 
  :in_reply_to_screen_name=>nil, 
  :user=>
    {
      :id=>970155879180873733, 
      :id_str=>"970155879180873733", 
      :name=>"Trending Faith", 
      :screen_name=>"TrendingFaith", 
      :location=>"", 
      :description=>"", 
      :url=>#Twitter URL Shortener (Had to remove for Stackoverflow),  
      :entities=>
        {
          :url=>
            {
              :urls=>[
                {
                  :url=>#Twitter URL Shortener (Had to remove for Stackoverflow), 
                  :expanded_url=>"http://trendingfaith.org", 
                  :display_url=>"trendingfaith.org", 
                  :indices=>[0, 23]
                }
              ]
            }, 
          :description=>
            {
              :urls=>[]
            }
        }, 
      :protected=>false, 
      :followers_count=>0, 
      :friends_count=>3, 
      :listed_count=>0, 
      :created_at=>"Sun Mar 04 04:36:00 +0000 2018", 
      :favourites_count=>0, 
      :utc_offset=>nil, 
      :time_zone=>nil, 
      :geo_enabled=>false, 
      :verified=>false, 
      :statuses_count=>1, 
      :lang=>"en", 
      :contributors_enabled=>false, 
      :is_translator=>false, 
      :is_translation_enabled=>false, 
      :profile_background_color=>"F5F8FA", 
      :profile_background_image_url=>nil, 
      :profile_background_image_url_https=>nil, 
      :profile_background_tile=>false, 
      :profile_image_url=>"http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png", 
      :profile_image_url_https=>"https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png", 
      :profile_link_color=>"1DA1F2", 
      :profile_sidebar_border_color=>"C0DEED", 
      :profile_sidebar_fill_color=>"DDEEF6", 
      :profile_text_color=>"333333", 
      :profile_use_background_image=>true, 
      :has_extended_profile=>false, 
      :default_profile=>true, 
      :default_profile_image=>true, 
      :following=>false, 
      :follow_request_sent=>false, 
      :notifications=>false, 
      :translator_type=>"none"
    }, 
  :geo=>nil, 
  :coordinates=>nil, 
  :place=>nil, 
  :contributors=>nil, 
  :is_quote_status=>false, 
  :retweet_count=>0, 
  :favorite_count=>0, 
  :favorited=>false, 
  :retweeted=>false, 
  :lang=>"en"
}

新问题

现在要弄清楚为什么只有一条推文回来了,因为有数百个我正在搜索的主题标签,但只有一个对我来说。我通过搜索标签'#HelloWorld'进行检查,然后又回来了许多。所以,它不只是搜索我的推文。我猜测所有其他带有我正在寻找的标签的人都可能是私人推文,除非通过Twitter推特?或者这是我的代码的另一个问题?如果这是我原来问题的一个无关问题,我可以创建一个新问题并提出问题。

最终更新:回答最后一个问题

之所以只有我的推文被标记为“TrendingFaith”,但是在拉动标签'HelloWorld'时我得到了更多的推文是因为我的推文是在过去一周内用'#TrendingFaith'制作的。标准Twitter API搜索仅提取过去7天的推文。您必须拥有高级或企业级帐户才能搜索30天或完整存档的帖子。他们的高级水平目前(截至2014年3月4日)处于测试阶段并且要求进入候补名单。

Link to Twitter Page

ruby-on-rails twitter rubygems
1个回答
0
投票

使用twitter gem

gem install twitter

或将其包含在您的Gemfile中

创建Twitter应用程序,获取身份验证代码

Init API

require 'twitter'

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

提出请求“推文给用户”

// get from user
tweets = client.user_timeline('rubyinside', count: 20)
tweets.each { |tweet| puts tweet.full_text }

提出请求“按标签搜索”

client.search('#searchHash').take(3).each do |tweet|
  puts tweet.inspect
end

检查这个以建立您的查询:qazxsw poi或qazxsw poi

© www.soinside.com 2019 - 2024. All rights reserved.