从Twitter获取推文,并将其显示在“话语主题”中,而无需再次重新发布

时间:2018-11-13 23:12:03

标签: ruby twitter discourse

我想编写一个应用程序,该应用程序可以从Twitter提取推文并将其发送到话语主题中。 所以我需要什么:

自日期时间起具有弹性的方法。 在适当的时间范围内从Twitter提取推文的方法 一种将推文发送到选定话语主题的方法 一种检查是否在主题之前发布过Tweets(或Tweeturl)的方法,以避免每次都获得相同的Tweets 每10秒或类似时间(可能是sidekiq)自动运行脚本的可能性

我已经得到的:

require 'bundler/setup'
require 'net/http'
require 'uri'
require 'twitter'
module GetTweet
  class Error < StandardError
  end

  def self.date
    date = Time.new
#set 'date' equal to the current date/time.
    date = date.year.to_s + "-" + date.month.to_s + "-" + (date.day - 1).to_s
#Without this it will output 2015-01-10 11:33:05 +0000; this formats it to display DD/MM/YYYY
  end

  $tweeturls = Array.new

  def self.catch_tweets
    client = Twitter::REST::Client.new do |config|
      config.consumer_key = "KAKAKAKAKAKAKAA"
      config.consumer_secret = "jKAKAKAKAKAKAKAA"
      config.access_token = "9KAKAKAKAKAKAKAA"
      config.access_token_secret = "KAKAKAKAKAKAKAA"
    end
    # getting all tweets in a hashmap with "mention" without retweet in option timeframe
    tweets = client.search("Bastiilange -rt", since: "#{date}", until: "2018-11-15")
    # put the hashmap into an sorted array
    sorted_tweets = tweets.sort_by {|tweet| tweet.created_at}
    # give me every uniq tweet
    sorted_tweets.uniq.each do |tweet|
      tweet = tweet.url
      if $tweeturls.include?(tweet)
      else
        $tweeturls.push(tweet)
      end
    end
  end
  catch_tweets
  puts $tweeturls
end

因此,tweeturls应该是所有保存在其中的tweet url的数组 似乎工作正常!

require 'net/http'
require 'uri'
require_relative 'get_tweet'

INSTANCE_URL = 'XXXXX'
API_USERNAME = 'XXXX'
API_KEY = 'XXXX'

def self.send_request

  def self.tweet_url
    $tweeturls.each do |tweet|
      @tweet = tweet.
    end
  end

  url = URI.parse(INSTANCE_URL)
  request = Net::HTTP::Post.new(url.path)
  request.set_form_data({'api_username' => API_USERNAME, 'api_key' => API_KEY, 'title' => "Neuer Post", 'topic_id' => 8, 'raw' => "#{tweet_url}"})
  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true
  response = http.request(request)

  puts response.code

end

send_request

那也行得通,好的,我猜。目前,通过调用该方法,我不仅获得了tweet的URL,这很不幸,但我认为是可修复的。我最大的担心是,我必须使脚本自动化(以后将是一个插件),并确保其不会一次又一次地获得时间表中的旧推文。我可以制作一个类似Time.now的东西-但是我认为TwitterApi不能准确地确定它是否可以正确工作吗?或者,我创建了第三个方法来获取来自话题主题的所有帖子,并比较数组并将它们合并为唯一的数组。但由于很多原因,我很确定这不是一个明智的解决方案。 我很想听听我如何可以做得更好的建议!

0 个答案:

没有答案