Si vous écrivez TinderBot en Python, elle peut le faire

introduction

Il y avait un tel script bash dans l'essentiel. Si vous lancez Tinder sur Android et exécutez ceci, il semble que vous puissiez continuer à glisser vers la droite (: heart :).

while true; do
    ./adb shell input swipe 100 400 4000 400 400;
done

https://gist.github.com/lawloretienne/4f044bde3eb8de67e2ae

Comme c'est simple! être déplacé. J'ai décidé de démarrer Tinder immédiatement. Mais Tinder a une limite de balayage, dit-il. Si un utilisateur gratuit balaye environ 120 fois, il ne pourra pas faire glisser pendant un certain temps. Il semble que cette restriction sera supprimée si vous vous inscrivez à un rapport sexuel rémunéré. Environ 1000 yens par mois. Demain est un petit jeûne.

TinderBot

L'essentiel ci-dessus est simple et merveilleux. Personne ne pense que même si vous jouez à ça au travail, vous vous amusez avec Tinder. Tout comme un ninja.

Cependant, cela ne nous permet pas de mesurer quel genre de personnes sont dans Tinder et quel genre de personnes sont: cœur:. C'est le dire de Tom Demarco: «Je ne peux pas contrôler ce que je ne peux pas mesurer», et il n'est pas exagéré de dire que si vous ne pouvez pas contrôler les femmes qui affluent vers moi (bien sûr, c'est vrai?), C'est une honte pour un homme. Alors que devons-nous faire.

Frappez simplement l'API. C'était facile quand je l'ai imaginé. C'est loin d'être la simplicité de l'essentiel ci-dessus, mais j'ai trouvé un client pour Python que je connais, alors j'ai d'abord écrit un Bot qui enregistre les informations de la personne qui a glissé 10000 fois dans SQLite.

Mouvement préparatoire

L'environnement de l'auteur est Ubuntu 14.04 LTS, il y a donc un peu de préparation. Quel gros problème.

$ sudo apt-get install build-essential python-dev libffi-dev libssl-dev
$ pip install pyopenssl ndg-httpsclient pyasn1 requests[security] python-datetimeutil SQLAlchemy

Ensuite, obtenez votre identifiant d'utilisateur Facebook et votre jeton d'accès.

L'ID utilisateur est ce site http://findmyfbid.com/

Le jeton d'accès peut maintenant être émis. Il vous suffit de copier l'URL de la barre d'adresse avant d'être redirigé. Le jeton d'accès est intégré dans le paramètre GET de l'URL. Ce jeton disparaîtra dans un court laps de temps (1 à 2 heures). https://www.facebook.com/dialog/oauth?client_id=464891386855067&redirect_uri=https://www.facebook.com/connect/login_success.html&scope=basic_info,email,public_profile,user_about_me,user_activities,user_birthday,user_education_history,user_friends,user_interests,user_likes,user_location,user_photos,user_relationship_details&response_type=token

: coeur: => 10000 filles

Si c'est réel, même une personne peut le faire: cœur: avec une préparation considérable, mais avec Tinder, cela peut être fait par: cœur: pour 10 000 personnes. Soit dit en passant, à ce stade, nous facturons et supprimons les restrictions sur la zone et l'âge. La distance et la différence d'âge ne sont pas liées à l'amour. À propos, cela prend le plus de temps pour penser à la phrase de profil jusqu'à présent.

from __future__ import unicode_literals
from datetime import datetime

from sqlalchemy import Column
from sqlalchemy import create_engine
from sqlalchemy import Date, DateTime
from sqlalchemy import Float, ForeignKey
from sqlalchemy import Integer
from sqlalchemy import SmallInteger
from sqlalchemy import String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm import sessionmaker

import pynder

FBTOKEN = 'Jetons Facebook que j'ai'
FBID = 'J'ai mon identifiant Facebook'

engine = create_engine('sqlite:///tinder.sqlite3', echo=True)
Session = sessionmaker(bind=engine)
Base = declarative_base()


class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    bio = Column(String)
    age = Column(SmallInteger)
    birth_date = Column(Date)
    ping_time = Column(DateTime)
    distance_km = Column(Float)
    get_photos = relationship('Photo')
    schools = relationship('School')
    jobs = relationship('Job')


class Photo(Base):
    __tablename__ = 'photos'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    url = Column(String)


class School(Base):
    __tablename__ = 'schools'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    name = Column(String)


class Job(Base):
    __tablename__ = 'jobs'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    name = Column(String)


def like_tinder_users(limit):
    sql_session = Session()

    session = pynder.Session(FBID, FBTOKEN)
    nearby_users = session.nearby_users(limit)[:limit]

    for user in nearby_users:
        photos = [Photo(url=url) for url in user.get_photos(width='640')]
        schools = [School(name=name) for name in user.schools]
        jobs = [Job(name=name) for name in user.jobs]

        sql_user = User(
            name=user.name,
            bio=user.bio,
            age=user.age,
            birth_date=user.birth_date,
            ping_time=datetime.strptime(user.ping_time, '%Y-%m-%dT%H:%M:%S.%fZ'),
            distance_km=user.distance_km,
            get_photos=photos,
            schools=schools,
            jobs=jobs,
        )
        sql_session.add(sql_user)
        user.like()

    sql_session.commit()
    sql_session.close()

if __name__ == '__main__':
    Base.metadata.create_all(engine)
    for i in range(1, 1001):
        like_tinder_users(10)
        print('I liked {} women xD'.format(i * 10))

En fait, j'ai écrit le code pour automatiser l'authentification avec Selenium + phantomjs, donc je n'ai pas confirmé l'opération, mais cela ressemble à ceci.

Version Colonne-Desktop de Tinder

Je pense que la vitesse de saisie des caractères d'Android n'est qu'environ 10% plus rapide que celle de l'utilisation du clavier. En d'autres termes, si vous correspondez à beaucoup de femmes, la saisie de caractères peut devenir un goulot d'étranglement. De nombreux services de rencontres ont une version Web, ce n'est donc pas un problème, mais Tinder n'a pas de version Web. J'ai donc décidé de faire à nouveau appel à mon prédécesseur.

C'est une version de bureau non officielle. Il est fait avec NW.js au lieu du très populaire Electron. Mais il n'y a pas de version Linux? Ne t'inquiète pas. Je vais simplement changer le fichier de construction. Heureusement, il y avait une personne qui a fait ce correctif. J'ai cloné chaque master et réécrit selon le diff, et cela a parfaitement fonctionné avec Trusty. C'est égoïste et je suis prêt à le faire.

Visualisation

Quelle que soit la quantité de données mises dans la base de données, cela n'a aucun sens à moins que la ventilation ne soit connue. Je veux afficher rapidement de belles données avec seaborn. Mais pour le moment, le match est de 0,15% (toujours 0,05% de mieux que lorsque je l'ai publié pour la première fois), et quand j'ai pensé que la femme me parlait, c'était Amway (), donc je vais dormir un peu plus longtemps. Le week-end, j'aimerais relever le défi de la visualisation pendant que je suis occupé avec une visite des installations des religions émergentes et une session d'information sur Amway / art antique.

Recommended Posts

Si vous écrivez TinderBot en Python, elle peut le faire
Si vous les gars dans la cuisine de portée pouvez le faire avec une marge ~ ♪
Pourquoi l'instruction main () -if de Python est-elle attachée?
Python | Ce que vous pouvez faire avec Python
N'écrivez pas Python si vous voulez l'accélérer avec Python
Que faire si vous obtenez moins zéro en Python
Vérifiez si vous pouvez vous connecter à un port TCP en Python
Si vous écrivez un test piloté par table go en python, il peut être préférable d'utiliser subTest
Que faire si vous ne pouvez pas utiliser la recherche de grille de sklearn en Python
Vous pouvez le faire avec Python! Analyse structurale de cristaux colloïdaux bidimensionnels
Que se passe-t-il si vous "importez A, B comme C" en Python?
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Si vous en savez beaucoup, vous pouvez écrire du code de test Python! ~ Super édition d'introduction ~
Que faire si vous obtenez «Python non configuré». Utilisation de PyDev dans Eclipse
La programmation parallèle est-elle difficile, et si oui, que pouvez-vous y faire?
Ecrire Python dans MySQL
% Et str.format () en Python. Lequel utilisez-vous?
Si vous rencontrez une "erreur de décodage Unicode" en Python
Prise en compte du moment où vous pouvez faire du bon travail en 10 ans avec Python3 et Scala3.
Que faire quand "Aucun noyau pour le langage python trouvé" apparaît dans Hydrogen
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Vous pouvez le faire en 3 minutes! Comment créer un code QR (GIF) fonctionnel!
Comprendre le rendement Python Si vous mettez le rendement dans une fonction, elle se transforme en générateur
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
[Pour les débutants] Vous pouvez le faire à partir de zéro! Création d'API avec AWS SAM et sortie de documents Open API en Python
Si vous ne comprenez pas les symboles mathématiques, vous pouvez écrire un programme.
Ecrire des filtres Pandec en Python
Nous recommandons Malbolge à ceux qui disent "Si vous utilisez un langage de programmation, vous pouvez le faire"
[Version Python] Pourquoi ne pouvez-vous pas faire de développement orienté objet avec Java?
Écrire une distribution bêta en Python
Ecrire python dans Rstudio (réticulé)
[Python] Comment écrire une instruction if en une phrase.
Ce que vous pouvez faire avec les statistiques de la bibliothèque Python standard
Que faire si Combinaisons devient «couverture inconnue»
Que faire lorsque swagger-codegen est terminé avec python et Erreur d'importation: aucun module nommé n'apparaît
Que faire si vous ne pouvez pas vous connecter en tant que root
Voici quelques grammaires que vous pourriez obtenir un slapstick si vous connaissez en Python
Voulez-vous attendre un usage général avec Python Selenium?
Il semble que vous puissiez maintenant écrire des livres de portail avec blueqat
Si vous êtes bloqué dans Impossible de charger mkl_intel_thread.dll en Python sous Windows
Que faire si vous ne pouvez pas installer pyaudio avec pip #Python
Supprimer un caractère spécifique en Python s'il s'agit du dernier
Considérez ce que vous pouvez faire avec Python dans l'article Qiita
Si vous souhaitez affecter une exportation csv à une variable en python
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
[Python] Comment faire PCA avec Python
Ecrire un schéma JSON avec Python DSL
Avez-vous besoin de Python re.compile?
Ecrire un serveur HTTP / 2 en Python
Jusqu'à ce que vous mettiez Python dans Docker
Ecrire une fonction AWS Lambda en Python
Ecrire des algorithmes A * (A-star) en Python
Ecrire le code de test du sélénium en python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Ecrire un test unitaire de langage C en Python
Que faire lorsque vous vous fâchez avec "Value Error: unknown local: UTF-8" dans python manage.py syncdb