3
votes

Existe-t-il un moyen d'obtenir un jeton Bearer maintenant, puisque Robinhood a à nouveau changé l'API?

Nous continuons à jouer à ce jeu de chat et de souris avec Robinhood.com. J'ai une application de trading qui permettait de négocier des actions avec Robinhood, mais ils continuent de changer l'API non officielle non prise en charge pour la rendre difficile à utiliser pour les traders. Je sais que beaucoup de gens font la même chose et je veux les contacter pour voir s'il y a une nouvelle réponse. Le dernier problème est lorsque j'essaie d'obtenir un jeton Bearer en utilisant l'URL https: //api.robinhood. com / oauth2 / token / l'API renvoie le JSON suivant: {"detail": "Cette version de Robinhood n'est plus prise en charge. Veuillez mettre à jour votre application ou utiliser Robinhood pour le Web pour vous connecter à votre compte."} . Cela a commencé le 26/04/2019.

Quelqu'un a-t-il encore trouvé un moyen de contourner ce problème, ou nous a-t-il finalement battu pour nous soumettre?


0 commentaires

3 Réponses :


1
votes

Je viens de le faire fonctionner. Au risque de voir ce message et de le modifier davantage, nous y voilà:

  1. Tout d'abord, vous allez vouloir vous connecter à votre compte RH dans un navigateur Web
  2. Affichez la source sur la page et recherchez clientId - il doit s'agir d'un grand nombre hexadécimal séparé par des tirets
  3. Ajoutez ce numéro à vos requêtes POST à ​​ / oauth2 / token sous le champ device_token

Il existe probablement un autre moyen de récupérer le jeton d'appareil, et je ne suis même pas sûr qu'il soit unique, mais cela devrait fonctionner.


5 commentaires

Génial! Même problème de show-stop! Mon ancien moteur de stock repose sur RobinhoodShell et, plus important encore, robinhood-python pour les options. Via un script, je peux générer un code d'authentification pour envoyer un e-mail et attraper ce Gmail à partir de Linux, mais je suis toujours hors de ma ligue pour résoudre ces projets.


Je ne savais pas que robinhood-python existait, et il semble que j'ai fondamentalement réinventé cette roue particulière. ;) D'après ce que je peux voir sur leur page GitHub, ils sont arrivés à la même solution que moi - ce qui n'est pas idéal - où vous pouvez récupérer votre jeton d'appareil par le biais de la manière piratée ci-dessus et le transmettre en tant que paramètre au requis. les fonctions. À un moment donné, il serait bien de trouver un moyen d'automatiser la récupération du jeton de l'appareil, mais il semble que personne n'ait encore cette solution.


forked.yannick.io/mstrum/robinhood-python est un projet quelque peu abandonné; l'auteur est au courant mais n'a pas le temps d'aborder la récente connexion plus stricte. N'importe quelle chance que vous le fassiez et sachez comment mettre en œuvre les solutions de contournement qu'ils ont apportées dans fast_arrow et robinhood-node ? J'essaie d'apprendre suffisamment de Python pour m'essayer moi-même: /


Je ne trouve pas le clientID dans le code source sur la page robinhood.com. La page est assez courte, donc je ne pense pas que je la raterais, mais je ne sais pas exactement quoi chercher. Cette méthode est-elle encore viable?


Jetez un œil à github.com/jmfernandes/robin_stocks Je viens de réimplémenter ceci et d'utiliser ce qui précède comme référence . L'ID client n'est pas unique, je suppose qu'il correspond à la version de l'application. Vous avez également besoin d'un jeton d'appareil maintenant, mais il ne s'agit que d'une chaîne hexadécimale aléatoire: générez-la une fois, enregistrez-la quelque part et transmettez-la avec vos demandes.



2
votes

Une solution plus complète (pas besoin de navigateur): Utilisez requests.session .

  1. Obtenez la page de connexion en envoyant une demande GET à " https://robinhood.com/login " . À ce stade, les cookies de la session contiendront "device_id".
  2. Obtenez cet identifiant d'appareil et utilisez-le pour envoyer la demande de jeton oauth2 à " https: // api. robinhood.com/oauth2/token/ "ajoutez également dans la demande de données" challenge_type "(" sms "ou" email "). Cette demande échouera avec un code d'erreur 400. Robinhood enverra un SMS ou un e-mail avec un code temporaire (5 minutes). À ce stade également, utilisez le corps de la réponse 400 pour obtenir «id» de «challenge» à l'intérieur de l'objet JSON.
  3. Confirmez le défi en envoyant une requête POST à ​​" https: //api.robinhood. com / challenge / CHALLENGEID / respond / "où CHALLENGEID est le même identifiant que celui mentionné dans la première requête / oauth2 / token / POST ayant échoué.
  4. Envoyez la même requête POST à ​​" https://api.robinhood.com/oauth2/token / "et incluez dans l'en-tête" X-ROBINHOOD-CHALLENGE-RESPONSE-ID "avec la valeur CHALLENGEID.

Vous pouvez réutiliser un device_id avec user / pass après cela, même après vous être déconnecté. Soyez prudent avec le stockage de device_id car il est le résultat d'une connexion utilisateur / pass et d'un SMS / e-mail 2FA réussi.


0 commentaires

0
votes

C'est bon d'être de retour ici après un très long moment. Je ne sais pas si quelqu'un cherche encore des réponses à cela, mais j'ai une solution très simple.

Sur l'écran de connexion de Robinhood, entrez votre nom d'utilisateur / email et votre mot de passe, appuyez sur F12 sur votre clavier pour faire apparaître le panneau de la console et passez à l'onglet "Réseau" puis attendez que la page se charge complètement. (Pendant ce temps, vous verrez une liste d'éléments en cours de chargement rapide en fonction de la vitesse de connexion.)

Pour le moment, vous pouvez continuer à effacer la liste en cliquant sur le bouton en surbrillance dans l'image ci-dessous.

Cliquez sur le bouton mis en évidence à plusieurs reprises jusqu'à ce que la liste soit vide

Maintenant, connectez-vous à votre compte Robinhood. À ce stade, votre console devrait afficher une liste similaire à celle illustrée ci-dessous.

Recherchez le nom "token /", ce sera probablement le deuxième que vous obtiendrez Toutes les informations dont vous avez besoin. Et ces informations seront sous les En-têtes puis Demander une charge utile

J'ai pu trouver cela grâce à mes connaissances et à mon expérience du scraping Web pour le plaisir. Et aussi, j'avais besoin de le savoir aussi, puisque j'ai récemment commencé à faire des métiers via Robinhood.

J'espère que cela vous aidera les curieux.


2 commentaires

Merci, ceci était vraiment utile!


Avez-vous un exemple de la façon d'obtenir des postes et les informations d'identification nécessaires?