Skip to content

Instantly share code, notes, and snippets.

@grimen
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grimen/70b131fea1985e2a8f2e to your computer and use it in GitHub Desktop.
Save grimen/70b131fea1985e2a8f2e to your computer and use it in GitHub Desktop.
'use strict'
GET = require 'request'
GROUP_ID = process.env.FACEBOOK_GROUP_ID
USER_ID = process.env.FACEBOOK_USER_ID
ACCESS_TOKEN = process.env.FACEBOOK_ACCESS_TOKEN
c = 100
class Page
constructor: (@type, @url, @parent = null) ->
worker = (fn) ->
setInterval fn, 0
collection = (object) ->
((object || {}).data || [])
more = (object) ->
object && object.paging && object.paging.next
logPost = (post) ->
console.log "\n===", post.created_time, '\n\n', post.message || '(no comment)', '\n\n', post.link || '(no link)'
logStats = ->
console.log "\nSTATS:\n\n", stats, "\n"
queue =
posts: []
likes: []
comments: []
data =
posts:
by_user: []
by_all: []
likes:
by_user: []
by_all: []
on_user_posts: []
comments:
by_user: []
by_all: []
on_user_posts: []
stats =
posts:
by_user: 0
by_all: 0
by_user_rate: 0
likes:
by_user: 0
by_all: 0
on_user_posts: 0
by_user_rate: 0
on_user_posts_rate: 0
comments:
by_user: 0
by_all: 0
on_user_posts: 0
by_user_rate: 0
on_user_posts_rate: 0
queue.posts.push new Page('posts', "https://graph.facebook.com/v2.2/#{GROUP_ID}/feed?access_token=#{ACCESS_TOKEN}")
# Posts
worker ->
if c && queue.posts.length
c -= 1
page = queue.posts.pop()
if page && page.url
GET page.url, (err, res, body) ->
if err
console.log 'ERROR', err, res, body
process.stdout.write 'p,'
object = JSON.parse body
(object.data || []).forEach (post) ->
# logPost post
# data.posts.by_all.push post
stats.posts.by_all += 1
stats.likes.by_all += collection(post.likes).length
stats.comments.by_all += collection(post.comments).length
if more post.comments
queue.comments.push new Page('comments', post.comments.paging.next, post)
if more post.likes
queue.likes.push new Page('likes', post.likes.paging.next, post)
if post.from.id == USER_ID
# data.posts.by_user.push post
stats.posts.by_user += 1
stats.posts.by_user_rate = stats.posts.by_user / stats.posts.by_all * 100
logPost post
do logStats
if object.paging
queue.posts.push new Page('posts', object.paging.next)
c += 1
else
c += 1
# Comments
worker ->
if c && queue.comments.length
c -= 1
page = queue.comments.pop()
if page && page.url
GET page.url, (err, res, body) ->
if err
console.log 'ERROR', err, page.url
process.stdout.write 'c,'
object = JSON.parse body
(object.data || []).forEach (object) ->
# data.comments.by_all.push post
stats.comments.by_all += 1
if object.from.id == USER_ID
# data.posts.by_user.push post
stats.comments.by_user += 1
stats.comments.by_user_rate = stats.comments.by_user / stats.comments.by_all * 100
if page.parent.from.id == USER_ID
# data.posts.on_user_posts.push post
stats.comments.on_user_posts += 1
stats.comments.on_user_posts_rate = stats.comments.on_user_posts / stats.comments.by_all * 100
if object.paging
queue.comments.push new Page('comments', object.paging.next, page.parent)
c += 1
else
c += 1
# Likes
worker ->
if c && queue.likes.length
c -= 1
page = queue.likes.pop()
if page && page.url
GET page.url, (err, res, body) ->
if err
console.log 'ERROR', err, page.url
process.stdout.write 'l,'
object = JSON.parse body
(object.data || []).forEach (object) ->
# data.likes.by_all.push post
stats.likes.by_all += 1
if object.id == USER_ID
# data.posts.by_user.push post
stats.likes.by_user += 1
stats.likes.by_user_rate = stats.likes.by_user / stats.likes.by_all * 100
if page.parent.from.id == USER_ID
# data.posts.on_user_posts.push post
stats.likes.on_user_posts += 1
stats.likes.on_user_posts_rate = stats.likes.on_user_posts / stats.likes.by_all * 100
if object.paging
queue.likes.push new Page('likes', object.paging.next, page.parent)
c += 1
else
c += 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment