Last active
September 16, 2020 16:09
-
-
Save naiquevin/5066745 to your computer and use it in GitHub Desktop.
Python script to thank people who sent birthday wishes on facebook
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 sys | |
from urllib import urlencode | |
import requests | |
from urlparse import urlparse, parse_qs | |
from random import choice | |
import re | |
self_id = None # your facebook id here | |
utc_bday = None # utc timestamp of your birthday | |
unichar_pattern = re.compile(r'\\u.{4}') | |
thanks = ['Thanks! :-)', 'Thanks a lot :-)', 'Thank you! :-)'] | |
wish_terms = reduce(lambda x, y: x + y, | |
map(lambda (x, y): ['%s %s' % (x, s) for s in y], | |
[('happy', ['birthday', 'bday', 'returns']), | |
('many', ['happy']), | |
('wish', ['you', 'u'])])) | |
def build_start_url(fb_id, access_token): | |
base_url = 'https://graph.facebook.com/%s/feed' % (fb_id,) | |
params = {'since': utc_bday, | |
'access_token': access_token} | |
url = '%s?%s' % (base_url, urlencode(params)) | |
return url | |
def post_dict(post): | |
return {'id': post['id'], | |
'from': post['from']['name'], | |
'message': post.get('message', ''), # cheap hack alert! | |
'type': post['type'], | |
'comments': post['comments']['count']} | |
def prepare_msg(message): | |
message = message.lower().replace('!', '') | |
message = re.sub(unichar_pattern, '', message) | |
return message | |
def is_bday_wish(message): | |
message = prepare_msg(message) | |
return any(map(lambda x: message.find(x) > -1, wish_terms)) | |
def get_wishes(url, acc=None): | |
acc = [] if acc is None else acc | |
params = parse_qs(urlparse(url).query) | |
until = params.get('until') | |
stop = False if until is None else int(until[0]) < utc_bday | |
if stop: | |
return acc | |
else: | |
print url | |
req = requests.get(url) | |
if req.status_code == 200: | |
content = req.json() | |
feed = map(post_dict, content['data']) | |
wishes = filter(lambda x: all([x['type'] == 'status', # type is status | |
x['from'] != self_id, | |
x['comments'] == 0, | |
is_bday_wish(x['message'])]), # not already thanked | |
feed) | |
next_url = content['paging']['next'] | |
return get_wishes(next_url, acc + wishes) | |
def send_thanks(wish, access_token): | |
message = choice(thanks) | |
payload = {'message': message} | |
url = 'https://graph.facebook.com/%s/comments?access_token=%s' % (wish['id'], access_token) | |
print 'Replying %s to %s' % (message, wish['from']) | |
requests.post(url, data=payload) | |
if __name__ == '__main__': | |
print 'Uncomment the `exit` if you know what you are doing!' | |
exit(0) | |
script, access_token = sys.argv | |
url = build_start_url(self_id, access_token) | |
wishes = get_wishes(url) | |
for wish in wishes: | |
send_thanks(wish, access_token) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hey I am getting this error while compiling this
What am i missing here? Is it the accesstoken? How will i get it?