FbRuby 0.0.2
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 +7 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +876 -0
- data/lib/FbRuby/chats.rb +369 -0
- data/lib/FbRuby/comments.rb +178 -0
- data/lib/FbRuby/createaccount.rb +142 -0
- data/lib/FbRuby/exceptions.rb +25 -0
- data/lib/FbRuby/facebook.rb +453 -0
- data/lib/FbRuby/groups.rb +260 -0
- data/lib/FbRuby/login.rb +297 -0
- data/lib/FbRuby/messenger.rb +272 -0
- data/lib/FbRuby/posts.rb +267 -0
- data/lib/FbRuby/settings.rb +282 -0
- data/lib/FbRuby/tempmail.rb +56 -0
- data/lib/FbRuby/user.rb +550 -0
- data/lib/FbRuby/utils.rb +412 -0
- data/lib/FbRuby.rb +21 -0
- metadata +114 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module FbRuby
|
2
|
+
|
3
|
+
class Exception < StandardError
|
4
|
+
attr_reader :message
|
5
|
+
|
6
|
+
def initialize(message = "Terjadi kesalahan :(")
|
7
|
+
@message = message
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
return @message
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Exceptions
|
16
|
+
class AccountCheckPoint < FbRuby::Exception; end
|
17
|
+
class LoginFailed < FbRuby::Exception; end
|
18
|
+
class InvalidCookies < FbRuby::Exception; end
|
19
|
+
class AccountTemporaryBanned < FbRuby::Exception; end
|
20
|
+
class AccountDisabled < FbRuby::Exception; end
|
21
|
+
class PageNotFound < FbRuby::Exception; end
|
22
|
+
class SessionExpired < FbRuby::Exception; end
|
23
|
+
class FacebookError < FbRuby::Exception; end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,453 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'date'
|
3
|
+
require 'tempfile'
|
4
|
+
require_relative 'user.rb'
|
5
|
+
require_relative 'utils.rb'
|
6
|
+
require_relative 'posts.rb'
|
7
|
+
require_relative 'login.rb'
|
8
|
+
require_relative 'groups.rb'
|
9
|
+
require_relative 'messenger.rb'
|
10
|
+
require_relative 'exceptions.rb'
|
11
|
+
|
12
|
+
module FbRuby
|
13
|
+
|
14
|
+
# class Facebook di gunakan agar penggunaan library jadi lebih mudah dan cepat
|
15
|
+
class Facebook < FbRuby::Login::Cookie_Login
|
16
|
+
|
17
|
+
# Inisialisasi Object Facebook
|
18
|
+
#
|
19
|
+
# @param cookies[String] Cookie akun facebook dalam format string
|
20
|
+
# @param free_facebook[Boolean] Gunakan web free facebook ketika login
|
21
|
+
# @param headers[Hash] Headers Yang akan di gunakan untuk requests sessions
|
22
|
+
# @param save_device[Boolean] Simpan Informasi Login
|
23
|
+
def initialize(cookies, free_facebook: false, headers: {}, save_device: true)
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
# Mengembalikan string representasi dari objek Facebook.
|
28
|
+
#
|
29
|
+
# @return [String] Representasi string dari objek Facebook.
|
30
|
+
def to_s
|
31
|
+
return "Facebook: host=#{@url} account=#{get_cookie_hash['c_user']}"
|
32
|
+
end
|
33
|
+
|
34
|
+
# Mengembalikan string representasi dari objek Facebook.
|
35
|
+
#
|
36
|
+
# @return [String] Representasi string dari objek Facebook.
|
37
|
+
def inspect
|
38
|
+
return to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
# Parsing Profile Pengguna
|
42
|
+
#
|
43
|
+
# @param username[String] Username atau id akun facebook
|
44
|
+
# @return [User]
|
45
|
+
def get_profile(username)
|
46
|
+
return FbRuby::User.new(username: username, requests_sessions: @sessions)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Parsing Groups
|
50
|
+
#
|
51
|
+
# @param group_id[String] Id group
|
52
|
+
# @return [Groups]
|
53
|
+
def get_groups(group_id)
|
54
|
+
return FbRuby::Groups.new(group_id: group_id, requests_sessions: @sessions)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Parsing Postingan
|
58
|
+
#
|
59
|
+
# @param post_url[String] Link postingan
|
60
|
+
# @return [Posts]
|
61
|
+
def post_parser(post_url)
|
62
|
+
return FbRuby::Posts.new(post_url: post_url, request_session: @sessions)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Parsing Messenger
|
66
|
+
#
|
67
|
+
# @return [Messenger]
|
68
|
+
def messenger
|
69
|
+
return FbRuby::Messenger.new(request_session: @sessions)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Dapatkan Foto Dari Akun Pengguna
|
73
|
+
#
|
74
|
+
# @param target[String] Id / username akun facebook
|
75
|
+
# @param limit[Integer] Jumblah foto yang akan di ambil
|
76
|
+
# @param albums_url[String] Url dari album foto
|
77
|
+
def get_photo(target, limit, albums_url = nil)
|
78
|
+
return get_profile(target).get_photo(limit, albums_url)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Dapatkan Album Dari Akun Pengguna
|
82
|
+
#
|
83
|
+
# @param target[String] Id / username akun facebook
|
84
|
+
# @param limit[Integer] Jumblah maksimal album yang akan di ambil
|
85
|
+
def get_albums(target, limit)
|
86
|
+
return get_profile(target).get_albums(limit)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Dapatkan Postingan dari Akun Pengguna
|
90
|
+
# @param target[String] Id / username akun facebook
|
91
|
+
# @param limit[Integer] Jumblah maksimal Postingan yang akan di ambil
|
92
|
+
def get_posts_user(target, limit)
|
93
|
+
return get_profile(target).get_posts(limit)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Dapatkan Postingan dari Group Facebook
|
97
|
+
# @param target[String] Id / username akun facebook
|
98
|
+
# @param limit[Integer] Jumblah maksimal Postingan yang akan di ambil
|
99
|
+
def get_posts_groups(target, limit)
|
100
|
+
return get_groups(target).get_posts(limit)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Dapatkan postingan dari beranda
|
104
|
+
#
|
105
|
+
# @param limit[Integer] Jumblah maksimal Postingan yang akan di ambil
|
106
|
+
def get_home_posts(limit)
|
107
|
+
post = []
|
108
|
+
html = @sessions.get(URI.join(@url, "home.php")).parse_html
|
109
|
+
|
110
|
+
while post.length < limit
|
111
|
+
url = html.css("a[href*='#footer_action_list']")
|
112
|
+
|
113
|
+
for i in url
|
114
|
+
break if post.length >= limit
|
115
|
+
post << post_parser((i['href'].include?('http') ? i['href'] : URI.join(@url, i['href']).to_s))
|
116
|
+
end
|
117
|
+
|
118
|
+
next_url = html.at_css("a[href^='/stories.php?aftercursorr']")
|
119
|
+
break if next_url.nil? or post.length >= limit
|
120
|
+
html = @sessions.get(URI.join(@url, next_url['href'])).parse_html
|
121
|
+
end
|
122
|
+
|
123
|
+
return post
|
124
|
+
end
|
125
|
+
|
126
|
+
# Buat Postingan di akun pengguna
|
127
|
+
#
|
128
|
+
# @param target[String] Id / Username akun facebook
|
129
|
+
# @param message[String] Caption dari postingan
|
130
|
+
# @param file[String] Path dari foto (hanya bisa posting 1 foto)
|
131
|
+
# @param location[String] Nama Kota / Nama tempat
|
132
|
+
# @param feeling[String] Nama Perasaan
|
133
|
+
# @param filter_type[String] Tipe Filter
|
134
|
+
# Ada 3 tipe filter
|
135
|
+
# -1 Tanpa Filter
|
136
|
+
# 2 Hitam Putih
|
137
|
+
# 3 Retro
|
138
|
+
def create_timeline_user(target,message, file: nil, location: nil,feeling: nil,filter_type: '-1', **kwargs)
|
139
|
+
return get_profile(target).create_timeline(message, file:file, location:location,feeling:feeling,filter_type:filter_type, **kwargs)
|
140
|
+
end
|
141
|
+
|
142
|
+
# Buat Postingan di Grup
|
143
|
+
#
|
144
|
+
# @param target[String] Id / Username akun facebook
|
145
|
+
# @param message[String] Caption dari postingan
|
146
|
+
# @param file[String] Path dari foto (hanya bisa posting 1 foto)
|
147
|
+
# @param location[String] Nama Kota / Nama tempat
|
148
|
+
# @param feeling[String] Nama Perasaan
|
149
|
+
# @param filter_type[String] Tipe Filter
|
150
|
+
# Ada 3 tipe filter
|
151
|
+
# -1 Tanpa Filter
|
152
|
+
# 2 Hitam Putih
|
153
|
+
# 3 Retro
|
154
|
+
def create_timeline_groups(target,message, file: nil, location: nil,feeling: nil,filter_type: '-1', **kwargs)
|
155
|
+
return get_groups(target).create_timeline(message, file:file, location:location,feeling:feeling,filter_type:filter_type, **kwargs)
|
156
|
+
end
|
157
|
+
|
158
|
+
# Buat Grup Baru
|
159
|
+
#
|
160
|
+
# @param name [String] Nama Group
|
161
|
+
# @param privacy [String] Privasi Grup "public,private"
|
162
|
+
def create_new_group(name, privacy)
|
163
|
+
privacy.downcase!
|
164
|
+
priv = ['public','private']
|
165
|
+
raise FbRuby::Exceptions::FacebookError.new("Invalid Privacy!!!") if !priv.include? (privacy)
|
166
|
+
html = @sessions.get(URI.join(@url, 'groups/create')).parse_html
|
167
|
+
formName = html.at_css("form[action^='/groups/create']")
|
168
|
+
formData = {"group_name"=>name,"verify"=>"Submit"}
|
169
|
+
formName.css("input[type = 'hidden']").each{|i| formData[i['name']] = i['value']}
|
170
|
+
namaSubmit = @sessions.get(URI.join(@url, formName['action']), formData).parse_html
|
171
|
+
|
172
|
+
if !namaSubmit.at_css("input[name='group_name'][type = 'text']").nil?
|
173
|
+
errMsg = namaSubmit.at_css("form[action^='/groups/create'] span")
|
174
|
+
errMsg = (errMsg.nil? ? "Terjadi Kesalahan :(" : errMsg.text)
|
175
|
+
raise FbRuby::Exceptions::FacebookError.new(errMsg)
|
176
|
+
end
|
177
|
+
|
178
|
+
formPrivacy = namaSubmit.at_css("form[action^='/groups/create/privacy']")
|
179
|
+
formPrivacyData = {"verify"=>"Submit"}
|
180
|
+
privasi = formPrivacy.css("input[type = 'radio']")
|
181
|
+
formPrivacy.css("input[type = 'hidden']").each{|i| formPrivacyData[i['name']] = i['value']}
|
182
|
+
privacyIndex = priv.index(privacy)
|
183
|
+
formPrivacyData[privasi[privacyIndex]['name']] = privasi[privacyIndex]['value']
|
184
|
+
create = @sessions.post(URI.join(@url, formPrivacy['action']), data = formPrivacyData).parse_html
|
185
|
+
gpUid = create.at_css("a[href^='/groups/'][href*='view=members']")
|
186
|
+
|
187
|
+
if gpUid.nil? and !create.at_css("input[name='group_name'][type = 'text']").nil?
|
188
|
+
errMsg = create.at_css("form[action^='/groups/create'] span")
|
189
|
+
errMsg = (errMsg.nil? ? "Terjadi Kesalahan :(" : errMsg.text)
|
190
|
+
raise FbRuby::Exceptions::FacebookError.new(errMsg)
|
191
|
+
end
|
192
|
+
|
193
|
+
return get_groups((gpUid['href'].match(/\/groups\/(\d+)/)[1]).strip)
|
194
|
+
end
|
195
|
+
|
196
|
+
# Tambahkan Teman
|
197
|
+
#
|
198
|
+
# @param target [String] Username / id akun target
|
199
|
+
def add_friends(target)
|
200
|
+
return get_profile(target).add_friends()
|
201
|
+
end
|
202
|
+
|
203
|
+
# Batalkan permintaan pertemanan
|
204
|
+
#
|
205
|
+
# @param target [String] Username / id akun target
|
206
|
+
def cancel_friends_requests(target)
|
207
|
+
return get_profile(target).cancel_friends_requests()
|
208
|
+
end
|
209
|
+
|
210
|
+
# Terima Permintaan Pertemanan
|
211
|
+
#
|
212
|
+
# @param target [String] Username / id akun target
|
213
|
+
def accept_friends_request(target)
|
214
|
+
return get_profile(target).accept_friends_requests()
|
215
|
+
end
|
216
|
+
|
217
|
+
# Hapus Permintaan Pertemanan
|
218
|
+
#
|
219
|
+
# @param target [String] Username / id akun target
|
220
|
+
def delete_friends_requests(target)
|
221
|
+
return get_profile(target).delete_friends_requests()
|
222
|
+
end
|
223
|
+
|
224
|
+
# Tambahkan Teman
|
225
|
+
#
|
226
|
+
# @param target [String] Username / id akun target
|
227
|
+
def remove_friends(target)
|
228
|
+
return get_profile(target).remove_friends()
|
229
|
+
end
|
230
|
+
|
231
|
+
# Dapatkan daftar teman
|
232
|
+
#
|
233
|
+
# @param target [String] Username / id akun target
|
234
|
+
# @param return_hash [Boolean] Kembalikan Hash jika true
|
235
|
+
def get_friends(target, limit, return_hash = true)
|
236
|
+
return get_profile(target).get_friends(limit, return_hash)
|
237
|
+
end
|
238
|
+
|
239
|
+
# Dapatkan daftar permintaan pertemanan
|
240
|
+
#
|
241
|
+
# @param limit [Integer] Batas maksimal
|
242
|
+
# @param return_hash [Boolean] Kembalikan Hash jika true
|
243
|
+
def get_friends_requests(limit, return_hash = true)
|
244
|
+
return getFriendsCenter("/friends/center/requests","/friends/center/requests",limit, return_hash)
|
245
|
+
end
|
246
|
+
|
247
|
+
# Dapatkan daftar permintaan pertemanan terkirim
|
248
|
+
#
|
249
|
+
# @param limit [Integer] Batas maksimal
|
250
|
+
# @param return_hash [Boolean] Kembalikan Hash jika true
|
251
|
+
def get_friends_requests_send(limit, return_hash = true)
|
252
|
+
return getFriendsCenter("/friends/center/requests/outgoing","/friends/center/requests/outgoing",limit, return_hash)
|
253
|
+
end
|
254
|
+
|
255
|
+
# Dapatkan daftar saran pertemanan
|
256
|
+
#
|
257
|
+
# @param limit [Integer] Batas maksimal
|
258
|
+
# @param return_hash [Boolean] Kembalikan Hash jika true
|
259
|
+
def get_sugest_friends(limit, return_hash = true)
|
260
|
+
return getFriendsCenter("/friends/center/suggestions/","/friends/center/suggestions/",limit, return_hash)
|
261
|
+
end
|
262
|
+
|
263
|
+
# Cari postingan di pencarian
|
264
|
+
#
|
265
|
+
# @param keyword [String] Keyword Pencarian
|
266
|
+
# @param limit [Integer] Limit Pencarian
|
267
|
+
def get_posts_by_search(keyword, limit = 5)
|
268
|
+
return searchPosts(keyword,"posts",limit)
|
269
|
+
end
|
270
|
+
|
271
|
+
# Cari Akun di pencarian
|
272
|
+
#
|
273
|
+
# @param keyword [String] Keyword Pencarian
|
274
|
+
# @param limit [Integer] Limit Pencarian
|
275
|
+
def get_people_by_search(keyword, limit = 5)
|
276
|
+
user = []
|
277
|
+
html = @sessions.get(URI.join(@url, "/search/people?q=#{ERB::Util.url_encode(keyword)}")).parse_html
|
278
|
+
|
279
|
+
while user.length < limit
|
280
|
+
for usr in html.css("img[alt*='profile picture']")
|
281
|
+
next if usr.parent['href'].nil?
|
282
|
+
break if user.length >= limit
|
283
|
+
findUid = usr.parent['href'].match(/\/(?:profile\.php\?id=(\d+)|([a-zA-Z0-9_.-]+)\?)/)
|
284
|
+
uid = (findUid[1].nil? ? findUid[2] : findUid[1])
|
285
|
+
user << FbRuby::User.new(username: uid, requests_sessions: @sessions)
|
286
|
+
end
|
287
|
+
|
288
|
+
next_url = html.at_css("a[href*='/search/people']")
|
289
|
+
|
290
|
+
break if next_url.nil? or user.length >= limit
|
291
|
+
html = @sessions.get(next_url['href']).parse_html
|
292
|
+
end
|
293
|
+
|
294
|
+
return user
|
295
|
+
end
|
296
|
+
|
297
|
+
# Cari Video di pencarian
|
298
|
+
#
|
299
|
+
# @param keyword [String] Keyword Pencarian
|
300
|
+
# @param limit [Integer] Limit Pencarian
|
301
|
+
def get_video_by_search(keyword, limit = 5)
|
302
|
+
return searchPosts(keyword,"videos",limit)
|
303
|
+
end
|
304
|
+
|
305
|
+
# Cari photo di pencarian
|
306
|
+
#
|
307
|
+
# @param keyword [String] Keyword Pencarian
|
308
|
+
# @param limit [Integer] Limit Pencarian
|
309
|
+
def get_photo_by_search(keyword, limit = 5)
|
310
|
+
return searchPosts(keyword,"photos",limit)
|
311
|
+
end
|
312
|
+
|
313
|
+
# Dapatkan notifikasi terbaru
|
314
|
+
#
|
315
|
+
# @param limit [Integer] Batas maksimal notifikasi yang di ambil
|
316
|
+
def get_notifications(limit)
|
317
|
+
notif = []
|
318
|
+
html = @sessions.get(URI.join(@url, "/notifications.php")).parse_html
|
319
|
+
|
320
|
+
while notif.length < limit
|
321
|
+
for i in html.css("a[href^='/a/notifications.php']")
|
322
|
+
break if notif.length >= limit
|
323
|
+
next if !i.at_css("img").nil?
|
324
|
+
notifData = {"message"=>nil,"time"=>nil,"redirect_url"=>URI.join(@url, i['href']).to_s}
|
325
|
+
msg = i.at_css("div span")
|
326
|
+
time = i.at_css("div abbr")
|
327
|
+
notifData["message"] = msg.text if !msg.nil?
|
328
|
+
notifData["time"] = time.text if !time.nil?
|
329
|
+
notif << notifData
|
330
|
+
end
|
331
|
+
|
332
|
+
next_url = html.at_css("a[href^='/notifications.php?more&']")
|
333
|
+
break if notif.length >= limit or next_url.nil?
|
334
|
+
html = @sessions.get(URI.join(@url, next_url['href'])).parse_html
|
335
|
+
end
|
336
|
+
|
337
|
+
return notif
|
338
|
+
end
|
339
|
+
|
340
|
+
# Dapat daftar grup saya
|
341
|
+
#
|
342
|
+
# @param limit [Integer] Batas maksimal grup yang di ambil
|
343
|
+
def get_mygroups(limit = 5)
|
344
|
+
group = []
|
345
|
+
html = @sessions.get(URI.join(@url, "/groups/?seemore")).parse_html
|
346
|
+
|
347
|
+
while group.length < limit
|
348
|
+
for url in html.css("a[href^='http'][href*='/groups'], a[href^='/groups']")
|
349
|
+
break if group.length >= limit
|
350
|
+
uid = url['href'].match(/\/groups\/(\d+)/)
|
351
|
+
next if uid.nil?
|
352
|
+
group << get_groups(uid[1])
|
353
|
+
end
|
354
|
+
|
355
|
+
next_url = html.at_css("a[href^='/groups?seemore']")
|
356
|
+
break if group.length >= limit or next_url.nil?
|
357
|
+
html = @sessions.get(URI.join(@url, next_url['href'])).parse_html
|
358
|
+
end
|
359
|
+
|
360
|
+
return group
|
361
|
+
end
|
362
|
+
|
363
|
+
# Dukung author
|
364
|
+
def support_author
|
365
|
+
kata = ['Hallo Kak @[100053033144051:] :)\n\nSaya suka library buatan kakak:)','Semangat ya kak ngodingnya:)','Semoga kak @[100053033144051:] Sehat selalu ya:)','Hai kak @[100053033144051:] :v','Hai kak Rahmet:)']
|
366
|
+
rahmat = get_profile("Anjay.pro098")
|
367
|
+
rahmat.follow()
|
368
|
+
|
369
|
+
planet = ['Matahari','Merkurius','Venus','Bumi','Mars','Jupiter','Saturnus','Uranus','Neptunus','Pluto']
|
370
|
+
motivasi = ['"Dia memang indah, namun tanpanya, hidupmu masih punya arti."','"Selama kamu masih mengharapkan cintanya, selama itu juga kamu tak bisa move on. Yang berlalu biarlah berlalu."','"Seseorang hadir dalam hidup kita, tidak harus selalu kita miliki selamanya. Karena bisa saja, dia sengaja diciptakan hanya untuk memberikan pelajaran hidup yang berharga."','"Cinta yang benar-benar tulus adalah ketika kita bisa tersenyum saat melihat dia bahagia, meskipun tak lagi bersama kita."','"Move on itu bukan berarti memaksakan untuk melupakan, tapi mengikhlaskan demi sesuatu yang lebih baik."','"Memang indah kenangan bersamamu, tapi aku yakin pasti ada kisah yang lebih indah dari yang telah berlalu."','"Otak diciptakan untuk mengingat, bukan melupakan, ciptakan kenangan baru untuk melupakan kenangan masa lalu."','"Cara terbaik untuk melupakan masa lalu adalah bukan dengan menghindari atau menyesalinya. Namun dengan menerima dan memafkannya."']
|
371
|
+
|
372
|
+
waktu = DateTime.now()
|
373
|
+
myPost = post_parser("https://www.facebook.com/100053033144051/posts/pfbid0ghCoMGdxGoSSxudGSthM5ZoxJPYujgow4Rvm8RpS6keHpXngFeD15uP22iv3oBvbl/?app=fbl")
|
374
|
+
|
375
|
+
if waktu.day == 13 and waktu.month == 1
|
376
|
+
myPost.send_comment("Selamat ulang tahun yang ke #{waktu.year - 2006} tahun kak @[100053033144051:] :)\n\nSemoga panjang umur dan terus bahagia.")
|
377
|
+
elsif waktu.day == 18 and waktu.month == 5
|
378
|
+
myPost.send_comment("Selamat ulang tahun yang ke #{waktu.year - 2007} tahun:)")
|
379
|
+
else
|
380
|
+
my_profile = get_profile("me")
|
381
|
+
photo = my_profile.profile_pict
|
382
|
+
temp = Tempfile.new(["photo-profile",".png"])
|
383
|
+
temp.write(@sessions.get(photo).body)
|
384
|
+
temp.rewind
|
385
|
+
asal = my_profile.living.values.last
|
386
|
+
asal = "Planet #{planet.sample}" if asal.nil?
|
387
|
+
time = DateTime.now()
|
388
|
+
komen = "Hallo kak @[100053033144051:], perkenalkan nama saya #{my_profile.name} saya tinggal di #{asal}.\n\n\n#{motivasi.sample}\n\n#{myPost.post_url}\n\nKomentar ini di tulis oleh bot\n[#{time.strftime('Pukul : %H:%M:%S')}]\n- #{time.strftime('%A, %d %B %Y')} -"
|
389
|
+
myPost.send_react("love")
|
390
|
+
send = myPost.send_comment(komen, file = temp.path)
|
391
|
+
temp.close
|
392
|
+
temp.unlink
|
393
|
+
|
394
|
+
return send
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
private
|
399
|
+
def getFriendsCenter(url, nextUrl, limit, return_hash = true)
|
400
|
+
minta = []
|
401
|
+
html = @sessions.get(URI.join(@url,url)).parse_html
|
402
|
+
while minta.length < limit
|
403
|
+
friends = html.at_css("div[id='friends_center_main']").css("div[class] table[class][role='presentation']").select{|i| !i.at_css("img[alt*='profile picture']").nil?}
|
404
|
+
break if friends.length.zero?
|
405
|
+
|
406
|
+
if return_hash
|
407
|
+
friends.each do |f|
|
408
|
+
name = f.at_css("a").text
|
409
|
+
uid = f.at_css("a")['href'].match(/(?:subject_id|uid)=(\d+)/)[1]
|
410
|
+
img = f.at_css("img")['src']
|
411
|
+
minta << {"name"=>name,"profile_pict"=>img,"username"=>uid}
|
412
|
+
end
|
413
|
+
else
|
414
|
+
thread = FbRuby::Utils::ThreadPool.new(size: 5)
|
415
|
+
friends.each do |f|
|
416
|
+
thread.schedule do
|
417
|
+
username = f.at_css("a")['href'].match(/uid=(\d+)/)[1]
|
418
|
+
minta << FbRuby::User.new(username: username, requests_sessions: @sessions)
|
419
|
+
end
|
420
|
+
end
|
421
|
+
thread.shutdown
|
422
|
+
end
|
423
|
+
|
424
|
+
next_url = html.at_css("a[href*='/#{nextUrl}'][href*='ppk']")
|
425
|
+
break if minta.length >= limit or next_url.nil?
|
426
|
+
html = @sessions.get(URI.join(@url, next_url['href'])).parse_html
|
427
|
+
end
|
428
|
+
|
429
|
+
return minta[0...limit]
|
430
|
+
end
|
431
|
+
|
432
|
+
def searchPosts(keyword,type, limit = 5)
|
433
|
+
posts = []
|
434
|
+
html = @sessions.get(URI.join(@url, "/search/#{type}?q=#{ERB::Util.url_encode(keyword)}")).parse_html
|
435
|
+
|
436
|
+
while posts.length < limit
|
437
|
+
for po in html.css("div[role = 'article'], div[id]")
|
438
|
+
url = po.at_css("a[href^='/story.php'][href*='#footer_action_list'], a[href^='https://'][href*='groups'][href*='permalink'][href*='#footer_action_list'], a[href^='/photo.php']")
|
439
|
+
next if url.nil?
|
440
|
+
break if posts.length >= limit
|
441
|
+
url = (url['href'].include?('http') ? url['href'] : URI.join(@url, url['href']).to_s)
|
442
|
+
posts << FbRuby::Posts.new(post_url: url, request_session: @sessions)
|
443
|
+
end
|
444
|
+
|
445
|
+
next_url = html.at_css("a[href*='/search/#{type}']")
|
446
|
+
break if next_url.nil? or posts.length >= limit
|
447
|
+
html = @sessions.get(next_url['href']).parse_html
|
448
|
+
end
|
449
|
+
|
450
|
+
return posts
|
451
|
+
end
|
452
|
+
end
|
453
|
+
end
|