Skip to content

Instantly share code, notes, and snippets.

@rtt
Created August 14, 2014 09:46
Show Gist options
  • Save rtt/5a2e0cfa638c938cca59 to your computer and use it in GitHub Desktop.
Save rtt/5a2e0cfa638c938cca59 to your computer and use it in GitHub Desktop.
example python tinderbot
# encoding: utf8 1,1 Top# encoding: utf8
import argparse
from datetime import datetime
import json
from random import randint
import requests
import sys
from time import sleep
headers = {
'app_version': '3',
'platform': 'ios',
}
fb_id = '{ your fb user id here }'
fb_auth_token = '{ your fb auth token here }'
class User(object):
def __init__(self, data_dict):
self.d = data_dict
@property
def user_id(self):
return self.d['_id']
@property
def ago(self):
raw = self.d.get('ping_time')
if raw:
d = datetime.strptime(raw, '%Y-%m-%dT%H:%M:%S.%fZ')
secs_ago = int(datetime.now().strftime("%s")) - int(d.strftime("%s"))
if secs_ago > 86400:
return u'{days} days ago'.format(days=secs_ago / 86400)
elif secs_ago < 3600:
return u'{mins} mins ago'.format(mins=secs_ago / 60)
else:
return u'{hours} hours ago'.format(hours=secs_ago / 3600)
return '[unknown]'
@property
def bio(self):
try:
x = self.d['bio'].encode('ascii', 'ignore').replace('\n', '')[:50].strip()
except (UnicodeError, UnicodeEncodeError, UnicodeDecodeError):
return '[garbled]'
else:
return x
@property
def age(self):
raw = self.d.get('birth_date')
if raw:
d = datetime.strptime(raw, '%Y-%m-%dT%H:%M:%S.%fZ')
return datetime.now().year - int(d.strftime('%Y'))
return 0
def __unicode__(self):
return u'{name} ({age}), {distance}km, {ago}'.format(
name=self.d['name'],
age=self.age,
distance=self.d['distance_mi'],
ago=self.ago
)
def auth_token(fb_auth_token, fb_user_id):
h = headers
h.update({'content-type': 'application/json'})
req = requests.post(
'https://api.gotinder.com/auth',
headers=h,
data=json.dumps({'facebook_token': fb_auth_token, 'facebook_id': fb_user_id})
)
try:
return req.json()['token']
except:
return None
def recommendations(auth_token):
h = headers
h.update({'X-Auth-Token': auth_token})
r = requests.get('https://api.gotinder.com/user/recs', headers=h)
if r.status_code == 401 or r.status_code == 504:
raise Exception('Invalid code')
print r.content
if not 'results' in r.json():
print r.json()
for result in r.json()['results']:
yield User(result)
def like(user_id):
try:
u = 'https://api.gotinder.com/like/%s' % user_id
d = requests.get(u, headers=headers, timeout=0.7).json()
except KeyError:
raise
else:
return d['match']
def nope(user_id):
try:
u = 'https://api.gotinder.com/pass/%s' % user_id
requests.get(u, headers=headers, timeout=0.7).json()
except KeyError:
raise
def like_or_nope():
return 'nope' if randint(1, 100) == 31 else 'like'
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Tinder automated bot')
parser.add_argument('-l', '--log', type=str, default='activity.log', help='Log file destination')
args = parser.parse_args()
print 'Tinder bot'
print '----------'
matches = 0
liked = 0
nopes = 0
while True:
token = auth_token(fb_auth_token, fb_id)
if not token:
print 'could not get token'
sys.exit(0)
for user in recommendations(token):
if not user:
break
print unicode(user)
try:
action = like_or_nope()
if action == 'like':
print ' -> Like'
match = like(user.user_id)
if match:
print ' -> Match!'
with open('./liked.txt', 'a') as f:
f.write(user.user_id + u'\n')
else:
print ' -> random nope :('
nope(user.user_id)
except:
print 'networking error %s' % user.user_id
s = float(randint(250, 2500) / 1000)
sleep(s)
@efraim-il
Copy link

efraim-il commented Dec 19, 2016

It doesn't work for me, why?

root@kali:~# ./gistfile1.py
from: can't read /var/mail/datetime
from: can't read /var/mail/random
from: can't read /var/mail/time
./gistfile1.py: line 11: headers: command not found
./gistfile1.py: line 12: app_version:: command not found
./gistfile1.py: line 13: platform:: command not found
./gistfile1.py: line 14: syntax error near unexpected token }' ./gistfile1.py: line 14: }'

Facebook ID and auth key is correct

@efraim-il
Copy link

Just tried now again and got it working :-)
My FB_ID is extactly like this (untouched) > fb_id = '{ 12***91520 }'
and in the fb_auth_token I removed the { } from both sides, so it looks like that:

fb_auth_token = 'EAAGm0PX4ZCpsBADOHTeqmo5XQXLeQ73dDcHfZABUVqN14AmxmXHnNFEn5juZC1qynrInx9UpZAi5v0zrRn2ZArEZCUuiARwGIuMzmFaPvV5C114BuxhxqBinOuqHJtZBB*********************************************************************XsxnR3N8IonsOItFvHFuq9usZD'

@efraim-il
Copy link

efraim-il commented Dec 21, 2016

networking error tinder_rate_limited_id_1482280511118_0
Tinder Team (25), 1km, -301 mins ago
-> Like
networking error tinder_rate_limited_id_1482280511118_1
Tinder Team (25), 1km, -300 mins ago
-> Like
networking error tinder_rate_limited_id_1482280511118_2
Tinder Team (25), 1km, -300 mins ago
-> Like
networking error tinder_rate_limited_id_1482280511118_3
Tinder Team (25), 1km, -300 mins ago
-> Like
networking error tinder_rate_limited_id_1482280511118_4
Tinder Team (25), 1km, -300 mins ago
-> Like
networking error tinder_rate_limited_id_1482280511118_5

Got this after like 2-3 minutes, how can I fix the script by adding some kind of sleep time ?
Edit: It's because it's a free user so the likes are limited, nothing to do with the script

@rezasaju
Copy link

hi i want to tinder boot

@efraim-il
Copy link

efraim-il commented Jan 18, 2017

Why after a few minutes I get an error "could not get token" ?

and sometimes I get an error after a few minutes

{u'status': 500, u'error': u''}
Traceback (most recent call last):
File "gistfile1.py", line 141, in
for user in recommendations(token):
File "gistfile1.py", line 95, in recommendations
for result in r.json()['results']:
KeyError: 'results'

@GraniteConsultingReviews

I m trying this code but compiler giving me error in user_id. Help me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment