2016-02-27 848 views
1

我正在放置一个蟒蛇Tinder机器人自动刷卡权,我也希望它发送消息。一切工作正常,只是当它匹配时,它应该发送一条消息,但不会。我试过了我能想到的所有可能的代码组合,但无济于事。任何帮助解决这个问题将非常感谢我和我所有未来的Tinder匹配(如果我什至得到任何)。蟒蛇Tinder机器人不会发送消息 - 网络错误

该代码调用一个叫做talk(user_id)的应执行POST curl请求的funtcion。

代码:

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': '519', 
    'platform': 'ios', 
} 


fb_id = 'XXXXXXXXXXXXX' 
fb_auth_token = 'XXXXXXXXXXXX' 


class User(object): 
    def __init__(self, data_dict): 
     self.d = data_dict 

    @property 
    def user_id(self): 
     return self.d['_id'] 

    @property 
    def name(self): 
     return self.d['name'] 

    @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' 


def talk(user_id): 
    try: 
     u = 'https://api.gotinder.com/user/matches/%s' % user_id 
     requests.post(
     u, 
     data=json.dumps=({'message': 'Hey! How are you?'}) 
     ) 
    except KeyError: 
     raise 


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) 

      if user.name == 'Tinder Team': 
       print('Out of swipes, pausing one hour...') 
       sleep(3601) 

      else: 
       try: 
        action = like_or_nope() 
        if action == 'like': 
         print ' -> Like' 
         match = like(user.user_id) 
         if match: 
          print ' -> Match!' 
          conversation = talk(user.user_id) 
          if conversation: 
           print ' -> Message Sent!' 

          with open('./matched.txt', 'a') as m: 
           m.write(user.user_id + u'\n') 

         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(10000, 20000)/1000) 
      sleep(s)` 

回答

0

检查下面的代码,如果这有助于。我使用pynder软件包来分析API,但我想逻辑仍然是一样的。

session._post('/user/matches/' + match['id'], {"message": "Hey! How are you?"}) 

凡后功能的工作原理如下图所示: -

def _post(self, url, data={}): 
     return self._request("post", url, data=data) 

试试这个方法,数据= {}消息直接 它的工作对我来说,完全没有问题。