Получение твитов из твиттера и их отображение в теме обсуждения без повторной публикации - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу написать приложение, которое позволяет извлекать твиты из твиттера и отправлять их в тему беседы.Итак, что мне нужно:

Метод, который имеет flex с datetime.Метод, который извлекает твиты из твиттера в соответствующий период времени. Метод, который отправляет твиты в выбранную тему беседы. Метод, который проверяет, были ли твиты (или твиты) опубликованы ранее в теме, чтобы избежать получения одних и тех же твитов каждый раз. Возможностьавтоматизировать выполнение скрипта каждые 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 - это массив, в котором сохранены все 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

Это тоже работает, хорошо, я думаю.На данный момент я получаю больше, чем только URL-адрес твита, вызывая метод, что является неудачным, но я думаю, что это можно исправить.Моя самая большая проблема заключается в том, что мне нужно автоматизировать скрипт (позже будет плагин) и убедиться, что он снова и снова не получает старые твиты, которые находятся в таймфрейме.Я мог бы сделать что-то вроде Time.now - но я думаю, что TwitterApi не настолько точен, что это будет работать правильно, верно?Или я создаю третий метод, чтобы получить все сообщения из темы дискурса, сравнить массивы и объединить их в уникальный.Но я уверен, что это не будет мудрым решением по многим причинам.Я хотел бы услышать предложения, как я мог сделать это лучше!

...