Created
January 2, 2015 05:20
-
-
Save drgarcia1986/f45cfe5d276d4cfecec8 to your computer and use it in GitHub Desktop.
Facebook "Liker"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
import json | |
import urllib3 | |
import sys | |
class Liker(): | |
__URL_API = 'https://graph.facebook.com/v2.2' | |
__URL_ME = '/me?fields=id' | |
__URL_HOME = '/me/home?fields=from,likes' | |
__URL_LIKE = '/{}/likes' | |
def __init__(self, token, guarded): | |
self.log = logging.getLogger("liker") | |
self.token = token | |
self.guarded = guarded | |
self.http_client = urllib3.PoolManager() | |
self.me = self.get_scope_id() | |
def build_url(self, resource): | |
return '{}{}{}access_token={}'.format(self.__URL_API, | |
resource, | |
'&' if '?' in resource else '?', | |
self.token) | |
def get_scope_id(self): | |
self.log.info('get scope id for me') | |
url = self.build_url(self.__URL_ME) | |
response = self.http_client.urlopen(url=url, method='GET') | |
return json.loads(response.data.decode())["id"] | |
def like(self, post_id): | |
self.log.info('make a like in post {}'.format(post_id)) | |
url_like = self.__URL_LIKE.format(post_id) | |
url = self.build_url(url_like) | |
response = self.http_client.urlopen(url=url, method='POST') | |
return response.status == 201 | |
def get_timeline(self): | |
self.log.info('getting timeline') | |
url = self.build_url(self.__URL_HOME) | |
response = self.http_client.urlopen(url=url, method='GET') | |
if response.status == 200: | |
return json.loads(response.data.decode())['data'] | |
def filter_posts(self, posts): | |
self.log.info('filter posts of {}'.format(self.guarded)) | |
posts_from_guarded = [{"id": p['id'], "likes": [l['id'] for l in p['likes']['data']]} for p in posts if p['from']['id'] == guarded] | |
self.log.info(posts_from_guarded) | |
posts_to_like = [] | |
for p in posts_from_guarded: | |
try: | |
p['likes'].index(self.me) | |
except ValueError: | |
posts_to_like.append(p['id']) | |
return posts_to_like | |
def run(self): | |
try: | |
timeline = self.get_timeline() | |
posts = self.filter_posts(timeline) | |
for post in posts: | |
self.like(post) | |
except Exception as err: | |
self.log.error(str(err)) | |
if __name__ == "__main__": | |
logging.basicConfig(level=logging.ERROR, | |
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', | |
datefmt='%m-%d %H:%M', | |
filename='/etc/liker.log', | |
filemode='w') | |
guarded = sys.argv[1] | |
token = sys.argv[2] | |
liker = Liker(token, guarded) | |
liker.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment