Skip to content

Instantly share code, notes, and snippets.

@majinlion
Forked from naiquevin/thankyou.py
Created June 15, 2017 19:25
Show Gist options
  • Select an option

  • Save majinlion/4fc0f58457068e83ae5dedf1f132e392 to your computer and use it in GitHub Desktop.

Select an option

Save majinlion/4fc0f58457068e83ae5dedf1f132e392 to your computer and use it in GitHub Desktop.
Python script to thank people who sent birthday wishes on facebook
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