CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Javascript - lire données d'un autre site

tribun
tribun
Niveau 7
26 mai 2017 à 15:21:54

Bonjour,

Je souhaite afficher sur une page web locale, avec mon navigateur, des données précises situées sur des sites internets (des valeurs financières), afin de les regrouper sur une même page et réaliser des calculs dessus, sans avoir besoin d'ouvrir toute les pages de ces sites une à une pour aller retrouver l'information sur chacune d'entre elles.

Évidemment je ne possède pas ces sites, et je ne trouve pas la fonction JavaScript qui permet de récupérer ces données.

Quelle fonction dois-je utiliser ?

Je vous remercie.

tribun
tribun
Niveau 7
26 mai 2017 à 17:56:24

Le 26 mai 2017 à 15:48:15 Ebara a écrit :
Call ajax (GET) + récupérer la réponse + chercher ce qu'il te faut dans le DOM. :)

J'ai essayé avec ça :

https://pastebin.com/0Cvikux0

mais ça ne fonctionne pas. Il retourne "probleme"

C'est possible de voir un exemple concret :question:

Idees-de-site
Idees-de-site
Niveau 2
27 mai 2017 à 10:34:29

EN l'état, normalement, tu ne peux pas, pour des raisons de sécurité ; le navigateur va bloquer les requêtes AJAX cherchant à sortir du domaine source.
Tu peux, ou bien utiliser PHP pour ce faire (je pense à cURL, file_get_content...) ou bien, si tu tiens à JavaScript, travailler avec NodeJs.

Grosso modo, disons que les requêtes doivent provenir du serveur et non pas du poste client.

Zx69_VirtuoZ
Zx69_VirtuoZ
Niveau 7
27 mai 2017 à 13:00:22

Sinon tu peu jeté à coup d'œil à JSONP

LECROU
LECROU
Niveau 10
28 mai 2017 à 23:15:19

Tu vas avoir des problèmes de CORS. Tu ne pourras pas taper d'un site à l'autre comme ça.
Comme l'a dit un de mes vdd, il va falloir que tu fasses ça côté serveur, donc avec Node si tu tiens à faire du js.

Attention à ce que tu vas scraper comme donnée, c'est pas toujours très très légal ou bien vu...

tribun
tribun
Niveau 7
23 octobre 2017 à 19:25:39

Le problème, c'est qu'il s'agit d'une API, et on devrait y accéder assez facilement.

L'adresse est ici :
https://bittrex.com/api/vv1.1/public/getmarketsummaries
Quand on clique depuis le navigateur on obtient les données directement.
voici les en-têtes :
https://image.noelshack.com/fichiers/2017/43/1/1508778077-ok.png

Par contre si on fait une requête AJAX... ça ne fonctionne plus, voici le code :
https://pastebin.com/XLx16vcT

et le résultat dans la console d'erreur :
https://image.noelshack.com/fichiers/2017/43/1/1508778077-erreur.png
"blocage d'une requête multi origines ... l'en-tête Access-Control-Allow-Origin est manquant"

Il me semble pourtant avoir suivi leur guide :
https://bittrex.com/home/api

--------
J'ai testé le code sur un autre site et les requêtes ne posent pas de problèmes :
https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC&tsyms=EUR
Le code est le même, il suffit de remplacer url_B par url_A :
https://pastebin.com/XLx16vcT

Alors comment faire pour accéder aux données publiques du site Bittrex via AJAX, de la même façon que pour l'autre site ? D'où vient le problème ?

[[sticker:p/1jnh]]
deepblue
deepblue
Niveau 16
23 octobre 2017 à 20:39:51

Le souci n'est pas ton code (que je n'ai pas lu). Le problème c'est que ta requête est faite coté client. Mes vdd ont expliqué le problème et c'est un comportement normal (même si pour le coup, ils auraient pu coller les bonnes règles sur leur serveur). La doc présente bien un exemple de code exécuté coté serveur (c'est du PHP).

Donc fait un proxy (une page qui fait retransmet les requêtes qui proviennent du même domaine) depuis ton serveur est le problème est réglé (laisse moi 1h, je fais des tests et j'te file la solution (en php)).

Message édité le 23 octobre 2017 à 20:41:41 par deepblue
deepblue
deepblue
Niveau 16
23 octobre 2017 à 22:45:39

https://gitnet.fr/deblan/poc-api-proxy/src/master/proxy.php (git clone + make + make server)

https://upload.deblan.org/u/2017-10/59ee54e5.jpg

deepblue
deepblue
Niveau 16
23 octobre 2017 à 23:13:28

Et c'est surement buggé, c'est juste une POC

tribun
tribun
Niveau 7
24 octobre 2017 à 00:03:48

Le 23 octobre 2017 à 20:39:51 deepblue a écrit :
Le souci n'est pas ton code (que je n'ai pas lu). Le problème c'est que ta requête est faite coté client. Mes vdd ont expliqué le problème et c'est un comportement normal (même si pour le coup, ils auraient pu coller les bonnes règles sur leur serveur). La doc présente bien un exemple de code exécuté coté serveur (c'est du PHP).

Pour le deuxième site la requête aussi est faite coté client, et pourtant elle marche. Dans l'en-tête de réponse on peut y voir :
Access-Control-Allow-Origin *
Est-ce seulement à cause de ça ? Parce-que c'est ce que j'ai cru comprendre.

C'est dingue qu'on puisse sans problème accéder aux données par accès direct avec l'adresse dans la barre URL, mais impossible de simuler la même chose sans être bloqué en interne par le navigateur. :ouch:
Il doit bien y avoir un moyen tout de même ? Le serveur reçoit une requête, peu importe comment elle a été générée, il est même pas sensé le savoir à la base.

Donc fait un proxy (une page qui fait retransmet les requêtes qui proviennent du même domaine) depuis ton serveur est le problème est réglé (laisse moi 1h, je fais des tests et j'te file la solution (en php)).

Le problème c'est que je n'ai pas de serveur PHP, c'est une page HTML personnelle dans le navigateur, qui me permet de récupérer les prix des crypto-monnaies qui me concerne, de faire automatiquement des opérations mathématique dessus (conversions) et d'afficher automatiquement le résultat. Cette page je l'ai aussi copiée sur mon smartphone en local et je l'ouvre avec le navigateur.

:hap:

deepblue
deepblue
Niveau 16
24 octobre 2017 à 00:38:54

C'est dingue qu'on puisse sans problème accéder aux données par accès direct avec l'adresse dans la barre URL, mais impossible de simuler la même chose sans être bloqué en interne par le navigateur.

Bah non, il ne faudrait pas que ça arrive (sauf si le serveur l'autorise). Exemple : il y a de forte chance que tu sois connecté à un compte facebook. Je t'envoie un lien vers une page piegée où, avec du javascript et des requêtes comme tu le fais ici, j'accède à facebook.com via ton navigateur (le client). Je pourrais alors récupérer tes données, poster un statut sur ton compte, , parler à tes contacts, etc.

Btw, ce n'est pas le serveur qui rejette ta requête car oui, il n'aura à priori aucune raison de le faire. C'est ton navigateur qui t'envoie chier :ok:

Access-Control-Allow-Origin: *

Oui c'est bien la solution coté serveur.

Message édité le 24 octobre 2017 à 00:42:22 par deepblue
tribun
tribun
Niveau 7
24 octobre 2017 à 01:38:58

Le 24 octobre 2017 à 00:38:54 deepblue a écrit :

C'est dingue qu'on puisse sans problème accéder aux données par accès direct avec l'adresse dans la barre URL, mais impossible de simuler la même chose sans être bloqué en interne par le navigateur.

Bah non, il ne faudrait pas que ça arrive (sauf si le serveur l'autorise). Exemple : il y a de forte chance que tu sois connecté à un compte facebook. Je t'envoie un lien vers une page piegée où, avec du javascript et des requêtes comme tu le fais ici, j'accède à facebook.com via ton navigateur (le client). Je pourrais alors récupérer tes données, poster un statut sur ton compte, , parler à tes contacts, etc.

Btw, ce n'est pas le serveur qui rejette ta requête car oui, il n'aura à priori aucune raison de le faire. C'est ton navigateur qui t'envoie chier :ok:

Les données de marché Bittrex sont publiques, mais pour accéder aux données privées (portefeuille personnel) ou pour passer des ordres de virements, il faut ajouter une clé personnelle dans l'URL. Ils n'ont peut-être pas pu (ou voulu) permettre une autorisation d'accès différente en fonction des différentes requêtes et c'est peut-être pour ça que c'est plus restrictif que sur l'API de Cryptocompare, qui n'est pas une plateforme d'échanges mais seulement d'informations.
:(

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment