instafavs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README +1 -0
- data/Rakefile +2 -0
- data/bin/instafavs +52 -0
- data/instafavs.gemspec +41 -0
- data/lib/instafavs/version.rb +3 -0
- data/lib/instafavs.rb +66 -0
- metadata +119 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Extract links from favorited tweets and send them to Instapaper.
|
data/Rakefile
ADDED
data/bin/instafavs
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'twitter'
|
4
|
+
require 'httparty'
|
5
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "..", "lib", "instafavs")
|
6
|
+
|
7
|
+
$verbose = false
|
8
|
+
|
9
|
+
def verbose(msg)
|
10
|
+
puts msg if $verbose
|
11
|
+
end
|
12
|
+
|
13
|
+
def send_links_from_fav_tweets_to_instapaper
|
14
|
+
Instafavs::Config.load!
|
15
|
+
|
16
|
+
seen_fav_ids = Set.new
|
17
|
+
favorites = Twitter.favorites(Instafavs::Config.twitter_username)
|
18
|
+
verbose("found #{favorites.size} latest favorites for user #{Instafavs::Config.twitter_username}")
|
19
|
+
favorites.each do |f|
|
20
|
+
seen_fav_ids << f.id_str
|
21
|
+
next if Instafavs::Config.last_seen_fav_ids.include?(f.id_str)
|
22
|
+
f.text.scan(%r{http(?:s?)://[^ ]+}).each do |url|
|
23
|
+
HTTParty.post("https://www.instapaper.com/api/add",
|
24
|
+
:query => { :url => url, :username => Instafavs::Config.instapaper_username,
|
25
|
+
:password => Instafavs::Config.instapaper_password })
|
26
|
+
end
|
27
|
+
end
|
28
|
+
Instafavs::Config.update_last_seen_fav_ids!(seen_fav_ids)
|
29
|
+
end
|
30
|
+
|
31
|
+
def collect_config_info
|
32
|
+
config = {}
|
33
|
+
%w(twitter_username instapaper_username instapaper_password).each do |needed_value|
|
34
|
+
while config[needed_value].nil? || config[needed_value] == ""
|
35
|
+
print "#{needed_value.sub(/_/, " ").capitalize}: "
|
36
|
+
config[needed_value] = gets.strip
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
config
|
41
|
+
end
|
42
|
+
|
43
|
+
options = Instafavs::parse_cmd_line_options!
|
44
|
+
|
45
|
+
$verbose = options[:verbose]
|
46
|
+
|
47
|
+
if options[:configure]
|
48
|
+
Instafavs::Config.save!(collect_config_info)
|
49
|
+
puts "Your configuration has been saved."
|
50
|
+
else
|
51
|
+
send_links_from_fav_tweets_to_instapaper
|
52
|
+
end
|
data/instafavs.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "instafavs/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "instafavs"
|
7
|
+
s.version = Instafavs::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Brad Bollenbach"]
|
10
|
+
s.email = ["bradb@30sleeps.com"]
|
11
|
+
s.homepage = "https://github.com/bradb/instafavs"
|
12
|
+
s.summary = %q{Extract links from favorited tweets and send them to Instapaper}
|
13
|
+
s.add_dependency("twitter", ">= 1.1.2")
|
14
|
+
s.add_dependency("httparty", ">= 0.7.3")
|
15
|
+
s.post_install_message = <<SETUP
|
16
|
+
********************************************************************************
|
17
|
+
|
18
|
+
To setup instafavs, follow these steps:
|
19
|
+
|
20
|
+
1. Run instafavs --configure. Fill in the info required.
|
21
|
+
|
22
|
+
2. Install instafavs into your crontab, e.g.
|
23
|
+
|
24
|
+
$ crontab -e
|
25
|
+
|
26
|
+
to check your Twitter feed every 5 minutes for new favorites, add this line:
|
27
|
+
|
28
|
+
*/5 * * * * /path/to/instafavs
|
29
|
+
|
30
|
+
Please email any feedback or bug reports to bradb@30sleeps.com.
|
31
|
+
|
32
|
+
********************************************************************************
|
33
|
+
SETUP
|
34
|
+
|
35
|
+
s.rubyforge_project = "instafavs"
|
36
|
+
|
37
|
+
s.files = `git ls-files`.split("\n")
|
38
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
39
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
40
|
+
s.require_paths = ["lib"]
|
41
|
+
end
|
data/lib/instafavs.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Instafavs
|
5
|
+
CONFIG_FILENAME = File.expand_path("~/.instafavs")
|
6
|
+
|
7
|
+
module Config
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def save!(config=nil)
|
12
|
+
config_to_save = config.nil? ? @config : config
|
13
|
+
|
14
|
+
File.open(CONFIG_FILENAME, "w+") do |f|
|
15
|
+
f.chmod(0600)
|
16
|
+
f.write(YAML.dump(config_to_save))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def load!
|
21
|
+
raise "missing configuration file. run 'instafavs --configure'." unless File.exists?(CONFIG_FILENAME)
|
22
|
+
@config = YAML.load_file(CONFIG_FILENAME)
|
23
|
+
end
|
24
|
+
|
25
|
+
def twitter_username
|
26
|
+
@config["twitter_username"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def instapaper_username
|
30
|
+
@config["instapaper_username"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def instapaper_password
|
34
|
+
@config["instapaper_password"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def last_seen_fav_ids
|
38
|
+
@last_seen_fav_ids ||= @config["last_seen_fav_ids"] || Set.new
|
39
|
+
end
|
40
|
+
|
41
|
+
def update_last_seen_fav_ids!(seen_fav_ids)
|
42
|
+
@config["last_seen_fav_ids"] = seen_fav_ids.to_a.join(",")
|
43
|
+
save!
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.parse_cmd_line_options!
|
50
|
+
options = {}
|
51
|
+
OptionParser.new do |opts|
|
52
|
+
opts.banner = "Usage: instafavs [options]"
|
53
|
+
|
54
|
+
opts.on("-c", "--configure", "Configure Twitter and Instapaper account details") do |c|
|
55
|
+
options[:configure] = true
|
56
|
+
end
|
57
|
+
|
58
|
+
opts.on("-v", "--verbose", "Provide more detailed output of what instafavs is doing") do |c|
|
59
|
+
options[:verbose] = true
|
60
|
+
end
|
61
|
+
end.parse!
|
62
|
+
|
63
|
+
options
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: instafavs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Brad Bollenbach
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-02-05 00:00:00 -08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: twitter
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 1
|
30
|
+
- 1
|
31
|
+
- 2
|
32
|
+
version: 1.1.2
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: httparty
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
- 7
|
46
|
+
- 3
|
47
|
+
version: 0.7.3
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
50
|
+
description:
|
51
|
+
email:
|
52
|
+
- bradb@30sleeps.com
|
53
|
+
executables:
|
54
|
+
- instafavs
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
extra_rdoc_files: []
|
58
|
+
|
59
|
+
files:
|
60
|
+
- .gitignore
|
61
|
+
- Gemfile
|
62
|
+
- README
|
63
|
+
- Rakefile
|
64
|
+
- bin/instafavs
|
65
|
+
- instafavs.gemspec
|
66
|
+
- lib/instafavs.rb
|
67
|
+
- lib/instafavs/version.rb
|
68
|
+
has_rdoc: true
|
69
|
+
homepage: https://github.com/bradb/instafavs
|
70
|
+
licenses: []
|
71
|
+
|
72
|
+
post_install_message: |
|
73
|
+
********************************************************************************
|
74
|
+
|
75
|
+
To setup instafavs, follow these steps:
|
76
|
+
|
77
|
+
1. Run instafavs --configure. Fill in the info required.
|
78
|
+
|
79
|
+
2. Install instafavs into your crontab, e.g.
|
80
|
+
|
81
|
+
$ crontab -e
|
82
|
+
|
83
|
+
to check your Twitter feed every 5 minutes for new favorites, add this line:
|
84
|
+
|
85
|
+
*/5 * * * * /path/to/instafavs
|
86
|
+
|
87
|
+
Please email any feedback or bug reports to bradb@30sleeps.com.
|
88
|
+
|
89
|
+
********************************************************************************
|
90
|
+
|
91
|
+
rdoc_options: []
|
92
|
+
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
segments:
|
109
|
+
- 0
|
110
|
+
version: "0"
|
111
|
+
requirements: []
|
112
|
+
|
113
|
+
rubyforge_project: instafavs
|
114
|
+
rubygems_version: 1.3.7
|
115
|
+
signing_key:
|
116
|
+
specification_version: 3
|
117
|
+
summary: Extract links from favorited tweets and send them to Instapaper
|
118
|
+
test_files: []
|
119
|
+
|