Récupération du prix de l'app pour site

BooleanneBooleanne Membre
octobre 2013 modifié dans Langages Web & serveurs #1

Bonjour,

 

je suis en train d'essayer de récupérer le prix de mon appli pour la mettre sur mon site. 

 

J'utilise le code suivant : 



function parseJson()
{
var myURL = 'http://itunes.apple.com/lookup?id=530871584'
 
$.getJSON(myURL, function(json) {alert("price: " + json.results[0].price);})
.done(function(json) {alert("success");})
.fail(function(json) {alert("error");})
.always(function(json) {alert("complete");});
}

 

Je tombe systématiquement sur un "fail", alors  que si je récupère le contenu de l'URL et que je l'enregistre en local, ça fonctionne.

Est-ce quelqu'un utilise cette fonctionnalité ? Est-ce que cela peut provenir des options du serveur ? (je suis chez free).

 

Merci d'avance de vos pistes.


Réponses

  • AliGatorAliGator Membre, Modérateur
    C'est une erreur de copier/coller, ou bien tu déclares ta variable myURL mais tu ne l'utilises jamais et ne la passe réellement même pas à  $.getJSON ?
  • Erreur de copier coller, sorry, je corrige.


  • AliGatorAliGator Membre, Modérateur
    Et tu n'as aucune erreur dans ta console Javascript ? (Tu n'as pas oublié d'importer le script de jQuery par exemple ?)
  • BooleanneBooleanne Membre
    octobre 2013 modifié #5

    Non, la ligne Jquery est bien là ,



    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>

    et, comme ça fonctionne en local, je pense que le code est bon.


    Voilà  ce que je fais sur mon serveur local (myFile.json est un bête copier-coller de l'URL appelé). Et dans ce cas là , je récupère le prix sans problème.



    function parseJson()
    {
    var myURL = 'myFile.json'

    $.getJSON("", function(json) {alert("price: " + json.results[0].price);})
    .done(function(json) {alert("success");})
    .fail(function(json) {alert("error");})
    .always(function(json) {alert("complete");});
    }



  • Et tu n'as aucune erreur dans ta console Javascript ?




     


    Sinon, je vois ça où, la console Javascript ?

  • AliGatorAliGator Membre, Modérateur
    octobre 2013 modifié #7
    Et cette console Javascript alors, elle t'indique qqch ou pas ?

    [EDIT] Ah ben on s'est croisés ;)

    Sinon, je vois ça où, la console Javascript ?

    Bah ça dépend, c'est quoi ton contexte ? Tu testes ce code dans un navigateur c'est ça ?

    Si tu utilises Safari c'est caché dans le menu Développement (qu'il faut avoir préalablement activé dans les Préférences Avancées de Safari), dans "Inspecteur Web". Si tu utilises Chrome, c'est dans le petit menu à  2 traits en haut à  droite, sous-menu Outils > Outils de Développement.
    Ou alors, sur Safari comme sur Chrome, clic droit sur ta page et choisis "Procéder à  l'inspection de l'élément" dans le menu contextuel.
    Si tu utilises un autre navigateur, bah heu... passe sur Safari ou Chrome ^^
  • Ok, je l'ai trouvée, merci.



    XMLHttpRequest cannot load http://itunes.apple.com/lookup?id=530871584&name=John&time=2pm. Origin http://framebuilder.free.fr is not allowed by Access-Control-Allow-Origin.
  • AliGatorAliGator Membre, Modérateur
    Ah oui, les fameuses règles de Cross-Domain pour faire de l'AJAX...
  • BooleanneBooleanne Membre
    octobre 2013 modifié #10

    Du coup avec l'erreur, j'ai pu trouver d'autres infos, dont cette page : 


     


    http://cypressnorth.com/programming/cross-domain-ajax-request-with-json-response-for-iefirefoxchrome-safari-jquery/


     


    avec à  mon avis, c'est ça qui est important 



    In a .NET WCF service, it's easiest to add this to the global.asax of your service like so:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin","*");
    }

    Mais là , du coup, je ne comprends pas où ça intervient. Je ne sais pas du tout quoi faire avec ça.


     


    EDIT : (encore croisés :))


  • Est-ce que je place ça dans mon htaccess ?


  • AliGatorAliGator Membre, Modérateur
    Et t'as essayé en rajoutant "&callback=?" à  la fin de ton URL comme expliqué dans la doc jQuery sur $.getJSON (pour contourner les restrictions cross-domain grâce à  JSONP, ce qui est aussi indiqué dans la doc de l'API itunes.apple.com concernant le paramètre "callback") ?
  • Non, je n'ai pas essayé ça, j'y vais de ce pas.


  • AliGatorAliGator Membre, Modérateur
    octobre 2013 modifié #14
    Je viens d'essayer à  l'instant, ça ça marche.
    Il faut bien utiliser à  la fois "?callback=?" mais aussi utiliser "https" et pas "http" pour requêter l'API iTunes.
     
    function parseJson()
    {
    var myURL = 'https://itunes.apple.com/lookup?callback=?'
    var params = { 'id':'530871584' };
    $.getJSON(myURL, {'id':'530871584'}, function(json) {alert("price: " + json.results[0].price);} );
    }
  • BooleanneBooleanne Membre
    octobre 2013 modifié #15

    Merveilleux, ça marche. Mille merci.


     


    EDIT : sans https, ça fonctionne aussi. Après, ce n'est peut-être pas gagné sous IE. Il faut que je teste ça.



    var myURL = 'http://itunes.apple.com/lookup?id=530871584&callback=?'
    $.getJSON(myURL + "&callback=?", null, function(json) {alert("price: " + json.results[0].price);})
    .done(function(json) {alert("success");})
    .fail(function(json) {alert("error");})
    .always(function(json) {alert("complete");});

  • AliGatorAliGator Membre, Modérateur
    Heu dans ton code tu as mis 2 fois "callback=?" au final à  la fin de ton URL ^^

    PS : Pour le coup du https c'est sans doute parce que je testais le code en live depuis le Google Code Playground qui est un site hébergé en https donc je suppose que dans ce cas il n'autorise que les requêtes AJAX vers du https aussi, mais dans ton cas comme tu es sur un site "http" tout court requêter l'API iTunes via "http" doit en effet suffire, c'était juste un cas particulier de mon contexte de test ;)
  • Euh... oui, et ce n'est par par excès de zèle... mais à  force de taper du code... je suis assez étourdie. Mais, il est sympa, il marche quand même... Comme quoi, on cherche pendant des heures, on teste des dizaines de lignes de codes... et on en laisse passer une plus grosse que soi, et là  ça marche quand-même ! Va comprendre ;)


     


    Bon, je finalise, j'ai bien galéré là -dessus, mais bien contente. Encore merci.


  • Et pour ceux que cela intéresse, pour récupérer le prix dans le bon store, ajouter "&country=code pays :


    Je vais essayer d'affiner la méthode pour récupérer le prix des in-Apps.



    var myURL = 'http://itunes.apple.com/lookup?id=530871584&country=fr'
    $.getJSON(myURL + "&callback=?", null, function(json) {alert("price: " + json.results[0].price);})
    .done(function(json) {alert("success");})
    .fail(function(json) {alert("error");})
    .always(function(json) {alert("complete");});
  • AliGatorAliGator Membre, Modérateur
    NB ce n'est qu'une question de style, mais perso je trouve ça plus lisible de passer les paramètres GET (id=..., country=...) en 2e argument de $.getJSON, plutôt que de les mettre toi-même directement dans l'URL (en plus en les passant en 2e argument, jQuery s'occupe de les encoder si besoin pour qu'ils respectent les conventions des RFC concernant les URLs)


    Donc plutôt que de mettre directement "?id=530871584&country=fr" à  la fin de ton URL, je trouve plus lisible de pas le mettre dans myURL (qui ne contient du coup que la baseURL vers l'API "http://itunes.apple.com/lookup") et passer " { 'id':'530871584', 'country':'fr' } " à  la place de " null " en 2e argument de $.getJSON.

    Après ce n'est qu'une affaire de goût, mais en plus ça permettra de plus facilement personnaliser les paramètres que tu passes au lookup, de faire ressortir plus clairement le country utilisé et l'id de l'App, de plus facilement ajouter des paramètres...



  • Après ce n'est qu'une affaire de goût...




     


    Non, ce n'est pas une affaire de goût... Javascript, jQuery, je n'y connais rien.. je m'en sors en piquant des bouts de codes, par ci, par là , mais je n'ai jamais vraiment pris la peine d'approfondir... je vais souvent au plus urgent. Donc, dans la mesure du possible, je suis les conseils qu'on me donne. Merci, donc, pour les précisions.

Connectez-vous ou Inscrivez-vous pour répondre.