Last.fm
Bonjour,
Je cherche à intégrer last.fm à mon logiciel qui permet le contrôle de iTunes.
Cependant, après 1 heure à feuilleter le site last.fm je ne trouve rien qui permette simplement de se connecter à son compte et à envoyer les données de lecture..
Aucun framework, rien du tout quoi..
Si quelqu'un sait quelque chose là dessus, je suis preneur.
Louka.
Je cherche à intégrer last.fm à mon logiciel qui permet le contrôle de iTunes.
Cependant, après 1 heure à feuilleter le site last.fm je ne trouve rien qui permette simplement de se connecter à son compte et à envoyer les données de lecture..
Aucun framework, rien du tout quoi..
Si quelqu'un sait quelque chose là dessus, je suis preneur.
Louka.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Donc aucun framework en vue et ça ne marcherait qu'avec des connections.. mais bon.
Y'a donc tout ce qu'il faut dans cocoa pour envoyer des requêtes, recevoir les réponses, puis les parser pour en extraire les infos.
.
En gros, je dois faire le md5 du password, ajouter l'Unix Timestamp puis refaire le md5 du tout.
Cependant, ce que je ne vois pas c'est comment faire cette "addition". Car je suppose que coller le timestamp au md5 du password ne marchera pas ?
A cette chaine, tu concatènes le timestamp (chaine contanant un nombre).
Tu obtiens donc une nouvelle chaine que tu vas à nouveau crypter via md5().
.
Autre question.. md5.. comment je dois l'utiliser exactement ?
D'après ce que m'a dit Psycho, le md5 du terminal n'est que pour les fichiers. Or là je veux le faire, comme vous l'avez compris, à partir d'un simple mot de passe..
Merci d'avance pour votre aide.
LouK
Sinon, pour l'utiliser dans un programme -> "man 3 md5"
.
Sinon j'avais téléchargé aussi le framework SSCrypto, ça aurait pu marcher aussi vous croyez ?
Une ligne suffit avec la fonction donnée dans le man ; il suffit de donner la chaà®ne, sa longueur, et un buffer pour le digest (16*sizeof(char))
Oui
Par contre, attention ; en fonction de l'encodage, tu n'auras pas le même MD5 s'il y a des caractères non ASCII...
Donc c'est plutôt "- (unsigned)lengthOfBytesUsingEncoding:(NSStringEncoding)enc" et "- (const char *)cStringUsingEncoding:(NSStringEncoding)encoding" qu'il faut utiliser
Ou pour la compatibilité <10.4 : "- (const char *)UTF8String" et "strlen"
Merci encore pour votre aide à vous deux
Pourquoi ça :
ça ne marche pas ? ???
Sinon via le terminal j'ai réussi !
Autre question (et là je pense que ça sera bon) : comment récupérer le timestamp ?
Parce que là je l'ai fait à la main, via un site où je rentre la date et me retourne l'Unix timestamp. Je n'ai trouvé que via le Terminal :
Parce que c'est pas vraiment ça :P
->
(16*sizeof(char) c'était la taille du buffer de digest qu'il fallait allouer...)
Merci Schlum Vivement que je me mette au C ^^
pourtant je fais [NSString stringWithFormat:@\%@%@\;"", md5Pass, timestamp] (que je rajoute dans les arguments pour en faire le MD5.
md5pass est bon, timestamp aussi. Car si je fais ça à la main via le terminal, c'est à dire :
md5 -s md5passtimestamp (bien sûr je remplace par les valeurs), ça marche bien, j'envoie ça sur l'URL et hop authentification OK
Par contre, si je récupère l'AUTH via mon logiciel, ça ne marche pas.. enfin le md5 est mauvais. Je soupçonne donc l'assemblement du md5Pass et timestamp
Lancer le process "md5" (qui n'est qu'une bête encapsulation de la fonction C dans une ligne de commande) peut te mener à des erreurs d'interprétation de paramètres.
En particulier je ne sais pas comment tu lances ton process "md5", mais si tu le fais par une NSTask, alors dans les paramètres que l'on passe à une NSTask on lui passe les arguments sous forme d'un NSArray, chaque argument étant un élément séparé du NSArray... ce n'est pas comme quand tu appelles une commande depuis le Terminal où, pour séparer les arguments, tu utilises le caractère espace... ce qui a pour effet qu'il faut alors utiliser les guillemets pour encapsuler les arguments avec un espace, guillemets qui sont enlevés par le SHELL (et non par le programme lancé) avant d'être passés en argv à ton programme
Conclusion ? Les guillemets sont de trop ici ! En plus la concaténation d'un MD5 (32 caractères héxadécimaux [0-9A-F]) et d'un timestamp (simple nombre [0-9]) ne devrait pas poser de problème pour le passage d'arguments, donc ils ne sont vraiment pas justifiés.
Le fait de les mettre fait que, si tu lances ta NSTask en lui passant ta chaà®ne entre guillemets, il va calculer le md5 de cette chaà®ne... guillemets compris, comme si les guillemets faisaient partie de la chaà®ne ! Alors que [tt][task setArguments:[NSArray arrayWithObjects:@-s, md5passAndTimestamp, nil]][/tt] sépare déjà les différents arguments, il prendra donc md5passAndTimestamp tel quel, guillemets compris si la chaà®ne en comporte.
Et cas plus général, mais >=10.4
Pour te répondre Ali, oui mon NSTask je l'ai très bien fait, c'est juste le md5 final qui semblait pas bon du tout.. J'ai bien séparé les arguments par des objets dans une NSArray et non par des espaces
(J'ai une erreur _MD5 referenced from). Malgré l'import de openssl/md5)
"upperCase" c'est juste pour utiliser "abcdef" ou "ABCDEF" pour l'hexadécimal
Effictivement en Release (sans zerolink), il faut ajouter -lcrypto dans les "Other Linker Flags"
En tout cas j'ai toujours un BADAuth avec l'URL
La doc est ici http://www.audioscrobbler.net/development/protocol/
ça m'énerve parce que si je fait md5(md5(password)+timestamp) dans le terminal et que jle rentre dans l'URL là ça marche..
Parce qu'avec ou sans guillemets ça marche Enfin je viens de m'en rendre compte.
si tu tapes
T'obtiens la même chose
Normal, c'est le principe des arguments en ligne de commande ; ce qui est entre guillemets correspond à 1 argument, même s'il y a des espaces dedans.
Par contre avec NSTask je crois que si on lui mets, il va les prendre comme faisant partie de l'argument.
Le truc c'est que le md5 final doit pas être le même que si je le fait sur le terminal. En tout cas l'URL me retourne un BadAuth (voir le lien de la doc plus haut).
Normal, c'est le principe des arguments en ligne de commande ; ce qui est entre guillemets correspond à 1 argument, même s'il y a des espaces dedans.
Par contre avec NSTask je crois que si on lui mets, il va les prendre comme faisant partie de l'argument.
[/quote]Ben oui c'est justement ce que je dis depuis le début !!!
Evidemment que dans le terminal que tu tapes [tt]md5 -s "test"[/tt] ou [tt]md5 -s test[/tt] ça renvoie les mêmes résultats ! Puisque le shell (bash très certainement) sépare les arguments (en prenant en compte les espaces, les guillemets, les backslashes, les redirections éventuelles, etc.) et qu'une fois qu'il a séparé les arguments et viré les guillemets, il appelle ensuite la tâche comme avec une NSTask, en passant chaque argument séparément comme dans un tableau... donc sans les guillemets, que le shell a enlevé ! Mais avec un appel via NSTask tu appelles directement la tâche sans passer par un shell qui te pré-parserait les arguments et te supprimerait les guillemets ou backslashes.
C'est pour ça qu'il ne FAUT PAS mettre les guillemets quand pour entourer les arguments quand on appelle une NSTask, même si on les mets quand on fait l'appel dans le terminal. La grande différence se situant donc sur le fait qu'il n'y a pas de shell intermédiaire
EagleLouk, ou l'art de chercher à faire compliquer et redondant :brule:
C'est pour tester au départ c'est pour ça
Après je ferais une classe pour car je dois l'utiliser dans d'autres classes !
En fait au final j'obtiens le même md5 que celui du mot de passe.