ig_scrape 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/README.md +16 -0
- data/bin/ig_scrape +38 -0
- data/ig_scrape.gemspec +3 -2
- data/lib/ig_scrape/client.rb +20 -14
- data/lib/ig_scrape/comment.rb +11 -0
- data/lib/ig_scrape/post.rb +22 -3
- data/lib/ig_scrape/version.rb +1 -1
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9027f0e5b57aeefba527eceb037a323e2d6e90bd
|
4
|
+
data.tar.gz: f34bf0399ef36ea67bbee37cea822dd540cc650c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07f3eb3e145d9c832f641ef3848002146e4904d8f9dd900822cdb4346f9e8799a1fdb86e81d67be9a3609dd5a9c83f45f45cc3e45fbd74bfd028905ef261bc05
|
7
|
+
data.tar.gz: 599447632f4ef2bd9d769960e51b9ab5a86e433f5aaba69e70849b271e3df718f6222d358f096cd7ca4099b0648ecfe367fc47a08cc2cbdb1cea446269823ab5
|
data/README.md
CHANGED
@@ -54,6 +54,22 @@ Or install it yourself as:
|
|
54
54
|
puts post.has_more_comments?
|
55
55
|
```
|
56
56
|
|
57
|
+
### Using the CLI
|
58
|
+
|
59
|
+
You can use the CLI to get a dump in JSON of posts and comments
|
60
|
+
|
61
|
+
```
|
62
|
+
gem install ig_scrape
|
63
|
+
|
64
|
+
ig_scrape help
|
65
|
+
|
66
|
+
# load all the posts for an account
|
67
|
+
ig_scrape posts --username theusername
|
68
|
+
|
69
|
+
# load all the comments for a post
|
70
|
+
ig_scrape comments --shortcode theshortcode
|
71
|
+
```
|
72
|
+
|
57
73
|
## Development
|
58
74
|
|
59
75
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/bin/ig_scrape
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'ig_scrape'
|
4
|
+
require 'thor'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
class IGScrape::CLI < Thor
|
8
|
+
|
9
|
+
desc "posts username", "Get all the posts for the username"
|
10
|
+
option :username, :required => true
|
11
|
+
def posts
|
12
|
+
begin
|
13
|
+
client = IGScrape::Client.new(options[:username])
|
14
|
+
client.load
|
15
|
+
posts = client.posts
|
16
|
+
puts JSON.pretty_generate(posts)
|
17
|
+
rescue ArgumentError => e
|
18
|
+
puts e.message
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "comments shortcode", "Get all the comments for a post's shortcode"
|
23
|
+
option :shortcode, :required => true
|
24
|
+
def comments
|
25
|
+
begin
|
26
|
+
post = IGScrape::Post.load_from_shortcode(options[:shortcode])
|
27
|
+
post.load_comments
|
28
|
+
|
29
|
+
comments = post.comments
|
30
|
+
puts JSON.pretty_generate(comments)
|
31
|
+
rescue ArgumentError => e
|
32
|
+
puts e.message
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
IGScrape::CLI.start(ARGV)
|
data/ig_scrape.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
18
|
f.match(%r{^(test|spec|features)/})
|
19
19
|
end
|
20
|
-
spec.bindir = "
|
21
|
-
spec.executables =
|
20
|
+
spec.bindir = "bin"
|
21
|
+
spec.executables = 'ig_scrape'
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.15"
|
@@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency "webmock"
|
29
29
|
spec.add_development_dependency "minitest-reporters"
|
30
30
|
spec.add_dependency "httparty"
|
31
|
+
spec.add_dependency "thor"
|
31
32
|
end
|
data/lib/ig_scrape/client.rb
CHANGED
@@ -30,21 +30,27 @@ class IGScrape::Client
|
|
30
30
|
url = "https://www.instagram.com/#{@username}/?__a=1"
|
31
31
|
resp = HTTParty.get(url)
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
case resp.code
|
34
|
+
when 200
|
35
|
+
response = JSON.parse(resp.body)
|
36
|
+
user = response["user"]
|
37
|
+
@full_name = user["full_name"]
|
38
|
+
@follower_count = user["followed_by"]["count"]
|
39
|
+
@follows_count = user["follows"]["count"]
|
40
|
+
@id = user["id"]
|
41
|
+
@post_count = user["media"]["count"]
|
42
|
+
@page_info = user["media"]["page_info"]
|
43
|
+
@profile_pic_url = user["profile_pic_url"]
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
media = user["media"]["nodes"]
|
46
|
+
if media
|
47
|
+
@posts = media.collect do |node|
|
48
|
+
IGScrape::Post.new(node)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
when 404
|
52
|
+
# the client does not exist
|
53
|
+
raise ArgumentError.new("#{@username} does not exist!")
|
48
54
|
end
|
49
55
|
end
|
50
56
|
|
data/lib/ig_scrape/comment.rb
CHANGED
@@ -6,6 +6,17 @@ class IGScrape::Comment
|
|
6
6
|
load_from_payload(payload)
|
7
7
|
end
|
8
8
|
|
9
|
+
def to_json(*args)
|
10
|
+
JSON.generate({
|
11
|
+
id: @id,
|
12
|
+
text: @text,
|
13
|
+
created_at: @created_at,
|
14
|
+
author_id: @author_id,
|
15
|
+
author_name: @author_name,
|
16
|
+
author_profile_pic: @author_profile_pic
|
17
|
+
})
|
18
|
+
end
|
19
|
+
|
9
20
|
private
|
10
21
|
|
11
22
|
def load_from_payload payload
|
data/lib/ig_scrape/post.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'json'
|
1
2
|
class IGScrape::Post
|
2
3
|
|
3
4
|
attr_accessor :id, :comment_count, :likes, :is_video, :code, :display_src, :caption, :created_at, :type, :comments
|
@@ -10,10 +11,16 @@ class IGScrape::Post
|
|
10
11
|
def self.load_from_shortcode code
|
11
12
|
url = "https://www.instagram.com/p/#{code}/?__a=1"
|
12
13
|
resp = HTTParty.get(url)
|
13
|
-
response = JSON.parse(resp.body)
|
14
|
-
payload = response["graphql"]["shortcode_media"]
|
15
14
|
|
16
|
-
|
15
|
+
case resp.code
|
16
|
+
when 200
|
17
|
+
response = JSON.parse(resp.body)
|
18
|
+
payload = response["graphql"]["shortcode_media"]
|
19
|
+
|
20
|
+
post = IGScrape::Post.new(self.edge_timeline_to_payload(payload))
|
21
|
+
when 404
|
22
|
+
raise ArgumentError.new("Post with #{code} does not exist!")
|
23
|
+
end
|
17
24
|
end
|
18
25
|
|
19
26
|
def has_more_comments?
|
@@ -40,6 +47,18 @@ class IGScrape::Post
|
|
40
47
|
}
|
41
48
|
end
|
42
49
|
|
50
|
+
def to_json(*args)
|
51
|
+
JSON.generate({
|
52
|
+
id: @id,
|
53
|
+
code: @code,
|
54
|
+
caption: @caption,
|
55
|
+
type: @type,
|
56
|
+
created_at: @created_at,
|
57
|
+
comment_count: @comment_count,
|
58
|
+
likes: @likes
|
59
|
+
})
|
60
|
+
end
|
61
|
+
|
43
62
|
private
|
44
63
|
|
45
64
|
def load_more_comments
|
data/lib/ig_scrape/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ig_scrape
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trevor Kimenye
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,10 +108,25 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: thor
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: A gem to scrape instagram posts and comments.
|
112
126
|
email:
|
113
127
|
- kimenye@gmail.com
|
114
|
-
executables:
|
128
|
+
executables:
|
129
|
+
- ig_scrape
|
115
130
|
extensions: []
|
116
131
|
extra_rdoc_files: []
|
117
132
|
files:
|
@@ -122,6 +137,7 @@ files:
|
|
122
137
|
- README.md
|
123
138
|
- Rakefile
|
124
139
|
- bin/console
|
140
|
+
- bin/ig_scrape
|
125
141
|
- bin/setup
|
126
142
|
- ig_scrape.gemspec
|
127
143
|
- lib/ig_scrape.rb
|