"exécuter" une URL et récupérer le résultat.

RocouRocou Membre
23 oct. modifié dans API communes #1

Bonjour,

si vous exécutez l'url suivante dans un navigateur, celui-ci vous renvoie une valeur. J'aimerais récupérer celle-ci mais je ne sais pas comment m'y prendre:
https://blockchain.info/tobtc?currency=EUR&value=1

Doc Apple, cours en ligne, youtube, j'ai appris plein de choses mais pas réussi ce qui semble être pourtant tout bête.
J'ai procédé ainsi:

    let url = URL(string: "https://blockchain.info/tobtc?currency=EUR&value=1")!
    var request = URLRequest(url: url)

Ensuite, j'ai créé une URLSessionDataTask puis lancé l'exécution par task.resume()

Mais j'ai deux soucis. Tout d'abord, l'exécution génère une erreur.

Mon second souci concerne les données à récupérer. Voici le bout de code que j'essaie d'exploiter:

`// Create the HTTP request
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in

if let error = error {
    // Handle HTTP request error
} else if let data = data {
    // Handle HTTP request response
} else {
    // Handle unexpected error
}

}`

Je suppose que la réponse à l'exécution de l'url doit se trouver dans "data" mais comment la récupérer sous forme de decimal?

Mots clés:

Réponses

  • FKDEVFKDEV Membre

    data contient en fait des caractères en utf8. Donc le plus simple c'est de le convertir en String, puis de convertir le String en Double.
    if let str = String(decoding: data, as: UTF8.self),
    let value = Double(str) {
    print("(value)")
    }
    Ça, c'est si t'es sûr que la valeur est toujours formatée à l'américaine avec un point et non une virgule pour séparer la partie entière et décimale, sinon il faut utiliser NumberFormatter.

  • RocouRocou Membre

    @FKDEV a dit :
    data contient en fait des caractères en utf8. Donc le plus simple c'est de le convertir en String, puis de convertir le String en Double.
    if let str = String(decoding: data, as: UTF8.self),

    Je te remercie mais ça ne passe pas à la compilation:
    "Initializer for conditional binding must have Optional type, not 'String'"

  • FKDEVFKDEV Membre

    Ah désolé, j'ai fait un copier/coller d'un site internet et je me suis trompé d'initializer pour String:

    if let str = String(decoding: data, encoding: .utf8),
    let value = Double(str) {
        print("(value)")
    }
    

    sinon fallait just enlever le "if" car cette forme ne renvoie pas un optional :

    let str = String(decoding: data, as: UTF8.self)  
    if let value = Double(str) {  
          print("(value)")  
    } 
    

    Cela dit, faut chercher un peu !
    C'est une erreur courante qui indique tu as traité un optional comme un non optional !

  • RocouRocou Membre

    J'ai encore beaucoup de chose à assimiler, je le sais :|

  • FKDEVFKDEV Membre
    Assimiler je sais pas, aujourd’hui les deux choses les plus importantes pour programmer, c’est connaître l’anglais et savoir chercher.
  • RocouRocou Membre

    Oui, tu as raison, savoir chercher étant de loin le plus compliqué.
    Ceci dit, apprendre la programmation (à tout niveau), c'est comme apprendre la musique. Il y a deux écoles:
    1- celle qui exige la connaissance intégrale du solfège avant de jouer un son sur un instrument.
    2- celle avec qui on commence à jouer des sons tout en intégrant peu à peu le solfège.

    Je suis un adepte de la seconde méthode bien évidemment. Le souci c'est que parfois on est bloqué pour ce que les "adeptes du solfège avant tout" considèrent comme basique.

    Inutile de te dire qu'après 10 ans sans avoir touché Xcode, je dois tout réapprendre.

  • FKDEVFKDEV Membre

    En tant que professionnel du développement, j'ai fini par oublier les difficultés que j'ai éprouvé en tant que débutant.

    Il faut choisir la méthode qui nous correspond.
    Personnellement je suis incapable d'apprendre un langage sans l'utiliser.
    Et j'oublie régulièrement les syntaxes les plus basiques.
    Ce que m'apporte l'expérience en revanche, c'est que j'imagine facilement ce qui est possible et je connais bien les mots clés en anglais, donc je trouve rapidement.

    Par expérience, je sais aussi que c'est face à une erreur ou un à un bug qu'on a finit par résoudre soi-même qu'on apprend le plus.

  • Eric P.Eric P. Membre

    @FKDEV a dit :
    Et j'oublie régulièrement les syntaxes les plus basiques.

    Tu me rassures...

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