ids_please 2.0.0.beta1 → 2.0.0.beta2
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 +50 -2
- data/lib/ids_please/grabbers/base.rb +1 -1
- data/lib/ids_please/grabbers/facebook.rb +1 -1
- data/lib/ids_please/grabbers/twitter.rb +28 -0
- data/lib/ids_please/grabbers.rb +9 -8
- data/lib/ids_please/parsers.rb +22 -27
- data/lib/ids_please/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c90688ce29bb8d767bed1b76578372de08fd159e
|
4
|
+
data.tar.gz: 05f2a555c749d65e856fd7f7564df5eefea1fdbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9fb21b711bc75b247e91b5748473787d8ffefc27f22531c9137c0cee37960fc696f778fd3a44ed5c6cb2a8a815c4443c2ebabcfc503c25894e393b2218aa55c
|
7
|
+
data.tar.gz: 7c88c109074baf10941152bfb97b82a6695d0298a57fcbadbaf4dd77535f4789ad61822f7b7204daa339da78634e488ebf481628d36e72ab18bcff5e97afac47
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://codeclimate.com/github/gazay/ids_please) [](https://www.omniref.com/ruby/gems/ids_please)
|
4
4
|
|
5
|
-
Get social network IDs or screen names from links to social network accounts.
|
5
|
+
Grab some hidden in html data from social account page. Get social network IDs or screen names from links to social network accounts.
|
6
6
|
|
7
7
|
Sometimes you need to get a social network account name from a link —
|
8
8
|
to store a screen name in your database instead of parsing the link every time,
|
@@ -28,7 +28,55 @@ gem 'ids_please'
|
|
28
28
|
|
29
29
|
## Usage
|
30
30
|
|
31
|
-
This
|
31
|
+
This gem works in two modes – you can get real data from social network by http request and page parsing
|
32
|
+
and you can just parse link to social account to find username/id. Sometimes username from link can't be
|
33
|
+
used with social network's API, in this case try to get real ID with grab mode.
|
34
|
+
|
35
|
+
### Grabbing data from social account's page
|
36
|
+
|
37
|
+
This functionality works through real http requests, so if you feed it with many links – it can take a while.
|
38
|
+
|
39
|
+
As Facebook shows data only from public pages and public groups – in most cases you can't gather data from
|
40
|
+
any profile page. Same thing about private `instagram` accounts, profiles and private groups in `vk`.
|
41
|
+
|
42
|
+
Also you should provide real urls with right protocols. For example you will not receive any data from `http://facebook.com/Microsoft`,
|
43
|
+
but from `https://facebook.com/Microsoft` you'll receive all data as in example below:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
ids = IdsPlease.new('https://instagram.com/microsoft/', 'https://facebook.com/Microsoft')
|
47
|
+
ids.grab
|
48
|
+
=> {:instagram=>
|
49
|
+
[IdsPlease::Grabbers::Instagram#70339427221180
|
50
|
+
@link=https://instagram.com/microsoft/,
|
51
|
+
@network_id=524549267,
|
52
|
+
@avatar=https://igcdn-photos-h-a.akamaihd.net/hphotos-ak-xpf1/t51.2885-19/10729318_654650964633655_619168277_a.jpg,
|
53
|
+
@display_name=Microsoft,
|
54
|
+
@username=microsoft,
|
55
|
+
@data={:bio=>"The official Instagram account of Microsoft. Celebrating people who break boundaries, achieve their goals, and #DoMore every day.", :website=>"http://msft.it/MSFTDoMore"}],
|
56
|
+
:facebook=>
|
57
|
+
[IdsPlease::Grabbers::Facebook#70339427168960
|
58
|
+
@link=https://facebook.com/Microsoft,
|
59
|
+
@network_id=20528438720,
|
60
|
+
@avatar=https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfa1/v/t1.0-1/394366_10151053222893721_1961351328_n.jpg?oh=f3efc47a669cf291221ca421eaf016fb&oe=55C61365&__gda__=1440162054_3bf920ed0b4c0c7873c4ec44affcec15,
|
61
|
+
@display_name=Microsoft,
|
62
|
+
@username=Microsoft,
|
63
|
+
@data={:type=>"company", :description=>"Welcome to the official Microsoft Facebook page, your source for news and conversation about..."}
|
64
|
+
]
|
65
|
+
}
|
66
|
+
|
67
|
+
insta = ids.grabbed[:instagram].first
|
68
|
+
insta.avatar
|
69
|
+
=> "https://igcdn-photos-h-a.akamaihd.net/hphotos-ak-xpf1/t51.2885-19/10729318_654650964633655_619168277_a.jpg"
|
70
|
+
```
|
71
|
+
|
72
|
+
Social networks supported for grabbing at the moment:
|
73
|
+
|
74
|
+
* [Facebook](https://www.facebook.com)
|
75
|
+
* [Twitter](https://www.twitter.com)
|
76
|
+
* [Instagram](http://instagram.com)
|
77
|
+
* [Vkontakte](https://vk.com)
|
78
|
+
|
79
|
+
### Link parsing
|
32
80
|
|
33
81
|
```ruby
|
34
82
|
ids = IdsPlease.new('https://twitter.com/gazay', 'http://facebook.com/alexey.gaziev')
|
@@ -7,7 +7,7 @@ class IdsPlease
|
|
7
7
|
@network_id = @page_source.scan(/entity_id":"(\d+)"/).flatten.first
|
8
8
|
@avatar = @page_source.scan(/og:image" content="([^"]+)"/).flatten.first
|
9
9
|
@display_name = @page_source.scan(/og:title" content="([^"]+)"/).flatten.first
|
10
|
-
@username = @page_source.scan(/og:url" content="
|
10
|
+
@username = @page_source.scan(/og:url" content="[^"]+\/([^\/"]+)"/).flatten.first
|
11
11
|
@avatar = CGI.unescapeHTML(@avatar.encode('utf-8')) if @avatar
|
12
12
|
@display_name = CGI.unescapeHTML(@display_name.encode('utf-8')) if @display_name
|
13
13
|
@data = {}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class IdsPlease
|
2
|
+
module Grabbers
|
3
|
+
class Twitter < IdsPlease::Grabbers::Base
|
4
|
+
|
5
|
+
def grab_link
|
6
|
+
@page_source ||= open(link).read
|
7
|
+
@network_id = @page_source.scan(/data-user-id="(\d+)"/).flatten.first
|
8
|
+
@avatar = @page_source.scan(/ProfileAvatar-image " src="([^"]+)"/).flatten.first
|
9
|
+
@display_name = @page_source.scan(/ProfileHeaderCard-nameLink[^>]+>([^<]+)</).flatten.first
|
10
|
+
@username = @page_source.scan(/<title>[^\(]+\(@([^\)]+)\)/).flatten.first
|
11
|
+
@data = {}
|
12
|
+
{
|
13
|
+
description: @page_source.scan(/ProfileHeaderCard-bio[^>]+>([^<]+)</).flatten.first.encode('utf-8'),
|
14
|
+
location: @page_source.scan(/ProfileHeaderCard-locationText[^>]+>([^<]+)</).flatten.first.encode('utf-8'),
|
15
|
+
join_date: @page_source.scan(/ProfileHeaderCard-joinDateText[^>]+>([^<]+)</).flatten.first.encode('utf-8'),
|
16
|
+
}.each do |k, v|
|
17
|
+
next if v.nil? || v == ''
|
18
|
+
@data[k] = CGI.unescapeHTML(v)
|
19
|
+
end
|
20
|
+
self
|
21
|
+
rescue => e
|
22
|
+
p e
|
23
|
+
return self
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/ids_please/grabbers.rb
CHANGED
@@ -2,23 +2,24 @@ require_relative 'grabbers/base'
|
|
2
2
|
require_relative 'grabbers/facebook'
|
3
3
|
require_relative 'grabbers/vkontakte'
|
4
4
|
require_relative 'grabbers/instagram'
|
5
|
+
require_relative 'grabbers/twitter'
|
5
6
|
|
6
7
|
class IdsPlease
|
7
8
|
module Grabbers
|
8
9
|
|
9
|
-
NETWORKS =
|
10
|
-
IdsPlease::Grabbers::Facebook,
|
11
|
-
IdsPlease::Grabbers::Vkontakte,
|
12
|
-
IdsPlease::Grabbers::
|
13
|
-
|
10
|
+
NETWORKS = {
|
11
|
+
facebook: IdsPlease::Grabbers::Facebook,
|
12
|
+
vkontakte: IdsPlease::Grabbers::Vkontakte,
|
13
|
+
twitter: IdsPlease::Grabbers::Twitter,
|
14
|
+
instagram: IdsPlease::Grabbers::Instagram
|
15
|
+
}
|
14
16
|
|
15
17
|
def self.each
|
16
|
-
NETWORKS.each { |n| yield n }
|
18
|
+
NETWORKS.values.each { |n| yield n }
|
17
19
|
end
|
18
20
|
|
19
21
|
def self.by_symbol(sym)
|
20
|
-
|
21
|
-
self.const_get(klass_name)
|
22
|
+
NETWORKS[sym]
|
22
23
|
end
|
23
24
|
|
24
25
|
end
|
data/lib/ids_please/parsers.rb
CHANGED
@@ -21,38 +21,33 @@ require_relative 'parsers/moikrug'
|
|
21
21
|
class IdsPlease
|
22
22
|
module Parsers
|
23
23
|
|
24
|
-
NETWORKS =
|
25
|
-
IdsPlease::Parsers::GooglePlus,
|
26
|
-
IdsPlease::Parsers::Vkontakte,
|
27
|
-
IdsPlease::Parsers::Twitter,
|
28
|
-
IdsPlease::Parsers::Facebook,
|
29
|
-
IdsPlease::Parsers::Instagram,
|
30
|
-
IdsPlease::Parsers::Blogger,
|
31
|
-
IdsPlease::Parsers::Ameba,
|
32
|
-
IdsPlease::Parsers::Hi5,
|
33
|
-
IdsPlease::Parsers::Linkedin,
|
34
|
-
IdsPlease::Parsers::Livejournal,
|
35
|
-
IdsPlease::Parsers::Reddit,
|
36
|
-
IdsPlease::Parsers::Pinterest,
|
37
|
-
IdsPlease::Parsers::Soundcloud,
|
38
|
-
IdsPlease::Parsers::Vimeo,
|
39
|
-
IdsPlease::Parsers::Youtube,
|
40
|
-
IdsPlease::Parsers::Odnoklassniki,
|
41
|
-
IdsPlease::Parsers::Tumblr,
|
42
|
-
IdsPlease::Parsers::Moikrug
|
43
|
-
|
24
|
+
NETWORKS = {
|
25
|
+
google_plus: IdsPlease::Parsers::GooglePlus,
|
26
|
+
vkontakte: IdsPlease::Parsers::Vkontakte,
|
27
|
+
twitter: IdsPlease::Parsers::Twitter,
|
28
|
+
facebook: IdsPlease::Parsers::Facebook,
|
29
|
+
instagram: IdsPlease::Parsers::Instagram,
|
30
|
+
blogger: IdsPlease::Parsers::Blogger,
|
31
|
+
ameba: IdsPlease::Parsers::Ameba,
|
32
|
+
hi5: IdsPlease::Parsers::Hi5,
|
33
|
+
linkedin: IdsPlease::Parsers::Linkedin,
|
34
|
+
livejournal: IdsPlease::Parsers::Livejournal,
|
35
|
+
reddit: IdsPlease::Parsers::Reddit,
|
36
|
+
pinterest: IdsPlease::Parsers::Pinterest,
|
37
|
+
soundcloud: IdsPlease::Parsers::Soundcloud,
|
38
|
+
vimeo: IdsPlease::Parsers::Vimeo,
|
39
|
+
youtube: IdsPlease::Parsers::Youtube,
|
40
|
+
odnoklassniki: IdsPlease::Parsers::Odnoklassniki,
|
41
|
+
tumblr: IdsPlease::Parsers::Tumblr,
|
42
|
+
moikrug: IdsPlease::Parsers::Moikrug
|
43
|
+
}
|
44
44
|
|
45
45
|
def self.each
|
46
|
-
NETWORKS.each { |n| yield n }
|
46
|
+
NETWORKS.values.each { |n| yield n }
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.by_symbol(sym)
|
50
|
-
|
51
|
-
IdsPlease::Parsers::GooglePlus
|
52
|
-
else
|
53
|
-
klass_name = "#{sym.to_s[0].upcase}#{sym.to_s[1..-1]}"
|
54
|
-
self.const_get(klass_name)
|
55
|
-
end
|
50
|
+
NETWORKS[sym]
|
56
51
|
end
|
57
52
|
|
58
53
|
end
|
data/lib/ids_please/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ids_please
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gazay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/ids_please/grabbers/base.rb
|
58
58
|
- lib/ids_please/grabbers/facebook.rb
|
59
59
|
- lib/ids_please/grabbers/instagram.rb
|
60
|
+
- lib/ids_please/grabbers/twitter.rb
|
60
61
|
- lib/ids_please/grabbers/vkontakte.rb
|
61
62
|
- lib/ids_please/parsers.rb
|
62
63
|
- lib/ids_please/parsers/ameba.rb
|