· 6 years ago · Nov 26, 2018, 02:40 AM
1#!/usr/bin/env ruby
2# -*- coding: utf-8 -*-
3require 'yaml'
4require 'twitter'
5require 'parallel'
6require 'pp'
7
8class Favshower
9 attr_accessor :config, :users
10
11 def initialize
12 @config = YAML.load_file('config.yml')
13 @users = @config["users"].map {|u|
14 Twitter::Client.new({
15 consumer_key: @config["consumer_key"],
16 consumer_secret: @config["consumer_secret"],
17 oauth_token: u["oauth_token"],
18 oauth_token_secret: u["oauth_token_secret"],
19 })
20 }
21 end
22
23 def bom(screen_name, count = 10)
24 statuses = @users.first.user_timeline(screen_name, count: 200)[0...count]
25 Parallel.each_with_index(statuses, in_processes: @users.size) do |s, i|
26 begin
27 @users[i % @users.size].favorite(s.id)
28 @users[i % @users.size].unfavorite(s.id)
29 puts "#{s.text}ã‚’ãµãã¼ã£ã¦ã‚ã‚“ãµãã¼ã—ã¾ã—ãŸã€‚"
30 rescue
31 puts "#{s.text}ã‚’ãµãã¼ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
32 end
33 end
34 end
35
36 def unfav(status_id)
37 count = Parallel.map((0...@users.size).to_a) do |i|
38 begin
39 @users[i % @users.size].unfavorite(status_id)
40 1
41 rescue
42 0
43 end
44 end.inject(&:+)
45 puts "#{count}回ã€#{status_id}ã‚’ãµãã¼ã‚Šã¾ã—ãŸã€‚"
46 end
47
48 def fav(status_id)
49 count = Parallel.map((0...@users.size).to_a) do |i|
50 begin
51 @users[i % @users.size].favorite(status_id)
52 1
53 rescue
54 0
55 end
56 end.inject(&:+)
57 puts "#{count}回ã€#{status_id}ã‚’ãµãã¼ã‚Šã¾ã—ãŸã€‚"
58 end
59
60 def kill_ngskbot
61 @users.each {|u|
62 u.update("@ngskbot " * 9)
63 }
64 end
65
66 def limit
67 pp @users.map(&:rate_limit_status).map {|r|
68 [r.reset_time, r.remaining_hits]
69 }
70 end
71end
72
73screen_name = ARGV[0]
74count = (ARGV[1] || 50).to_i
75exit unless screen_name
76
77puts "#{count}ã®ãµãã¼ã‚’ã€#{screen_name}ã«ã€‚"
78Favshower.new.bom(screen_name, count)
79# Favshower.new.limit