Я хочу написать приложение, которое позволяет извлекать твиты из твиттера и отправлять их в тему беседы.Итак, что мне нужно:
Метод, который имеет 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 не настолько точен, что это будет работать правильно, верно?Или я создаю третий метод, чтобы получить все сообщения из темы дискурса, сравнить массивы и объединить их в уникальный.Но я уверен, что это не будет мудрым решением по многим причинам.Я хотел бы услышать предложения, как я мог сделать это лучше!