Last.fm

2»

Réponses

  • TchouboudouTchouboudou Membre
    20:26 modifié #32
    Je suis pas sûr pour le Terminal, ni pour le C, mais dans les langages web, la concaténation se fait avec un " . " (point).

    md5 -s blabla<br />df5ea29924d39c3be8785734f13169c6<br />md5 -s df5ea29924d39c3be8785734f13169c6.1199466338<br />ccfbcdefc3f7c707b44eb8c506a9819a
    

  • 20:26 modifié #33
    Via le terminal ça marche bien de toute façon.
  • schlumschlum Membre
    20:26 modifié #34
    dans 1199466405:

    Je suis pas sûr pour le Terminal, ni pour le C, mais dans les langages web, la concaténation se fait avec un " . " (point).

    md5 -s blabla<br />df5ea29924d39c3be8785734f13169c6<br />md5 -s df5ea29924d39c3be8785734f13169c6.1199466338<br />ccfbcdefc3f7c707b44eb8c506a9819a
    




    J'obtiens la même chose avec ma catégorie !

    NSLog(@&quot;MD5 (&#092;&quot;%@&#092;&quot;) = %@&quot;,@&quot;blabla&quot;,[@&quot;blabla&quot; MD5HexHashFromUTF8Representation]);<br />	NSLog(@&quot;MD5 (&#092;&quot;%@&#092;&quot;) = %@&quot;,@&quot;df5ea29924d39c3be8785734f13169c6.1199466338&quot;,[@&quot;df5ea29924d39c3be8785734f13169c6.1199466338&quot; MD5HexHashFromUTF8Representation]);
    


    ->
    [Session started at 2008-01-05 00:15:42 +0100.]<br />2008-01-05 00:15:42.670 TestUI[17580] MD5 (&quot;blabla&quot;) = df5ea29924d39c3be8785734f13169c6<br />2008-01-05 00:15:42.671 TestUI[17580] MD5 (&quot;df5ea29924d39c3be8785734f13169c6.1199466338&quot;) = ccfbcdefc3f7c707b44eb8c506a9819a
    
  • 20:26 modifié #35
    M'enfin ?? C'est quoi qui cloche ??
  • AliGatorAliGator Membre, Modérateur
    janvier 2008 modifié #36
    dans 1199492176:

    M'enfin ?? C'est quoi qui cloche ??
    Toi, non ?


    (allez, t'as plus qu'à  aller voter pour toi-même :D)
  • schlumschlum Membre
    20:26 modifié #37
    dans 1199492176:

    M'enfin ?? C'est quoi qui cloche ??


    Ben je sais pas moi, aboule le code et les tests que t'as fait, on verra bien :P
  • 20:26 modifié #38
    dans 1199498741:

    dans 1199492176:

    M'enfin ?? C'est quoi qui cloche ??
    Toi, non ?


    (allez, t'as plus qu'à  aller voter pour toi-même :D)


    Salopard :p j'ai déjà  voté totosh :p


    Dans ton code schlum, j'ai l'impression qu'en fait il ne prend pas mon rajout de timestamp au md5 du password..
    Car comme je l'ai déjà  dit, md5(password) et md5(password.timestamp) me donne exactement la même chose.

    Voici donc le code de test :
    <br />const char *rep = [password cStringUsingEncoding:NSUTF8StringEncoding];<br />	unsigned int lg = [password lengthOfBytesUsingEncoding:NSUTF8StringEncoding];<br />	unsigned char digest[16];<br />	char hexHash[33];<br />	MD5((const unsigned char*)rep,(unsigned long)lg,digest);<br />	int i,j;<br />	// Optimisable...<br />	for(i=0,j=0;i&lt;16;++i,j+=2)<br />		snprintf(hexHash+j,3,NO?&quot;%02X&quot;:&quot;%02x&quot;,digest[i]);<br />	NSString* md5 = [NSString stringWithUTF8String:hexHash];<br />	<br />	NSTask* task = [[NSTask alloc] init];<br />	[task setLaunchPath:@&quot;/bin/date&quot;];<br />	[task setArguments:[NSArray arrayWithObjects:@&quot;+%s&quot;,nil]];<br />	NSPipe* pipe = [NSPipe pipe];<br />	[task setStandardOutput:pipe];<br />	[task launch];<br />	<br />	NSData* data;<br />	data=[[pipe fileHandleForReading] availableData];<br />	NSString* timestamp = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];<br />	NSLog(md5);<br />	md5 = [NSString stringWithFormat:@&quot;%@%@&quot;, md5, timestamp];<br />	NSLog(md5);<br />	rep = [password cStringUsingEncoding:NSUTF8StringEncoding];<br />	lg = [password lengthOfBytesUsingEncoding:NSUTF8StringEncoding];<br />	hexHash[33];<br />	MD5((const unsigned char*)rep,(unsigned long)lg,digest);<br />	// Optimisable...<br />	for(i=0,j=0;i&lt;16;++i,j+=2)<br />		snprintf(hexHash+j,3,NO?&quot;%02X&quot;:&quot;%02x&quot;,digest[i]);<br />	md5 = [NSString stringWithUTF8String:hexHash];<br />	<br />	NSLog(timestamp);<br />	NSLog(md5);<br />	NSString* URLString = [NSString stringWithFormat:@&quot;http://post.audioscrobbler.com/?hs=true&amp;p=1.2&amp;c=osx&amp;v=7.5&amp;u=%@&amp;t=%@&amp;a=%@&quot;,username,timestamp,md5];<br />	NSURL* url = [NSURL URLWithString:URLString];<br />	NSURLRequest *theRequest=[NSURLRequest requestWithURL:url<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cachePolicy:NSURLRequestUseProtocolCachePolicy<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timeoutInterval:30.0];<br />	<br />	NSURLConnection* connection = [NSURLConnection connectionWithRequest:theRequest delegate:self];<br /><br /><br />	[timestamp release];<br />
    
  • AliGatorAliGator Membre, Modérateur
    20:26 modifié #39
    dans 1199545486:

    Dans ton code schlum, j'ai l'impression qu'en fait il ne prend pas mon rajout de timestamp au md5 du password..
    Car comme je l'ai déjà  dit, md5(password) et md5(password.timestamp) me donne exactement la même chose.
    Ben en même temps c'est normal, c'est ce que tu lui demandes :
    rep = [password cStringUsingEncoding:NSUTF8StringEncoding];<br />	lg = [password lengthOfBytesUsingEncoding:NSUTF8StringEncoding];<br />	hexHash[33];<br />	MD5((const unsigned char*)rep,(unsigned long)lg,digest);
    
    Donc même la 2e fois tu demandes le MD5 de "password"... au lieu de demander celui de ta variable md5 qui contient md5+timestamp...

    C'est bien pour ça que je te dis que tu as tord, même pour un "test rapide" (encore plus pour un test rapide, car dans ce cas on fait pas forcément attention aux erreurs bateau), car du coup ton code n'est pas très lisible à  cause des répétitions de blocs et du copier/coller... qui font qu'on laisse très facilement passer ce genre d'erreur ;)
    Tu aurais utilisé dès le début le code de schlum comme une catégorie (je vois pas ce qui t'a poussé à  pas le faire, ça ne fait que rajouter 4 lignes correspondant à  @interface, @end, @implementation, @end, quand même pas la mort !) ça t'aurais permis d'avoir un code plus lisible et surtout exempt d'erreurs  ;)
  • 20:26 modifié #40
    ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D
    Merci Ali  ;D ;D ;D ;D
    Le premier qui se moque je le mord  ;D ;D
  • AliGatorAliGator Membre, Modérateur
    20:26 modifié #41
    dans 1199547516:

    ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D
    Merci Ali  ;D ;D ;D ;D
    Le premier qui se moque je le mord  ;D ;D
    Se moquer ? Mais non...

    mmpppfffffrrr....
  • 20:26 modifié #42
    dans 1199547831:

    dans 1199547516:

    ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D
    Merci Ali  ;D ;D ;D ;D
    Le premier qui se moque je le mord  ;D ;D
    Se moquer ? Mais non...

    mmpppfffffrrr....


    canard.gif

    Va jouer va jouer  ::)
  • AliGatorAliGator Membre, Modérateur
    20:26 modifié #43
    Hum comment on voit comme j'ai été obligé de m'abaisser à  ton niveau pour comprendre tes erreurs de boulet dans ton code... y compris pour le calcul du timestamp et de son md5 que je t'ai donné par iChat... moi je dis no comment :)beta:

    [PJ]
    (Et ton canard en plastique que tu aimes tant au point de trouver des excuses bidon pour le mettre dans tes parodies audio... tu peux le garder :P) :(renaud):
    [/PJ]
  • schlumschlum Membre
    janvier 2008 modifié #44
    Moi ce que je ne comprends pas c'est pourquoi tu utilises une NSTask pour obtenir le nombre de secondes depuis le 1er Janvier 1970  :P
    C'est vraiment se prendre la tête pour rien  :crackboom:-

    "man gettimeofday"  ;)
    (Cette fonction va te donner une structure contenant les secondes et même les microsecondes passées depuis le 1er Janvier 1970)

    Faut vraiment que tu te mettes au C   :)


    En gros, ce que tu chopes en une quinzaine de lignes en créant un shell et en lançant un exécuatble externe peut s'obtenir directement en 3 lignes (4 en comptant l'include) :

    #include &lt;sys/time.h&gt;<br />// ...<br />struct timeval tp;<br />gettimeofday(&amp;tp,NULL);<br />NSString *timestamp = [NSString stringWithFormat:@&quot;%ld&quot;,tp.tv_sec];
    

  • 20:26 modifié #45
    En tout cas ça marche :D J'ai pris [[NSDate date] timeIntervalSince1970];
    J'ai enfin passé le handshake. Cependant je suis confronté à  un autre problème. Jusqu'à  maintenant j'ai du utiliser le méthode GET pour le hanshake (je vous rappel le lien : http://www.audioscrobbler.net/development/protocol/ ).
    Maintenant, pour envoyer les informations du current track de iTunes, je doit utiliser le méthode POST vers l'URL suivante : http://62.216.251.205:80/protocol_1.2

    Alors ma grande question : Comment je dois procéder exactement ?

    Voici les infos à  envoyer :


    Submission Stage

    The submission takes place as a HTTP/1.1 POST transaction with the server, using the URL provided during the handshake phase of the protocol. The submission body may contain the details for up to 50 tracks which are being submitted. Under normal circumstances only a single track will be submitted, however, clients should cache submissions in case of failure.

    The request takes the form of a group of form encoded key-value pairs which are submitted to the server as the body of the HTTP POST request, using the URL provided in the handshake. All specified parameters must be present; they should be left empty if not known. The key-value pairs are:

    s=<sessionID>
    The Session ID string as returned by the handshake. Required.
    a[0]=<artist>
    The artist name. Required.
    t[0]=<track>
    The track title. Required.
    i[0]=<time>
    The time the track started playing, in UNIX timestamp format (integer number of seconds since 00:00:00, January 1st 1970 UTC). This must be in the UTC time zone, and is required.
    o[0]=<source>
    The source of the track. Required, must be one of the following codes:
    PChosen by the userRNon-personalised broadcast (e.g. Shoutcast, BBC Radio 1)EPersonalised recommendation except Last.fm (e.g. Pandora, Launchcast)LLast.fm (any mode). In this case, the 5-digit Last.fm recommendation key must be appended to this source ID to prove the validity of the submission (for example, "o[0]=L1b48a").USource unknown
    Please note, for the time being, sources other than P and L are not supported.

    r[0]=<rating>
    A single character denoting the rating of the track. Empty if not applicable.
    LLove (on any mode if the user has manually loved the track). This implies a listen.BBan (only if source=L). This implies a skip, and the client should skip to the next track when a ban happens.SSkip (only if source=L)
    Note: Currently, a web-service must also be called to set love/ban status. We anticipate that this will be phased out soon, and the submission service will handle the whole process.

    l[0]=<secs>
    The length of the track in seconds. Required when the source is P, optional otherwise.
    b[0]=<album>
    The album title, or empty if not known.
    n[0]=<tracknumber>
    The position of the track on the album, or empty if not known.
    m[0]=<mb-trackid>
    The MusicBrainz Track ID, or empty if not known.
    Key-value pairs are separated by an '&' character, in the usual manner for form submissions in HTTP. The values given to the keys must be converted to UTF-8 first, and must be URL encoded. Multiple submissions may be specified by repeating the a[], t[], b[], m[], l[], and i[] key-value pairs with increasing indices.


    évidemment les infos à  rentrer je les connais, là  n'est pas le problème. Le gros problème c'est : comment procéder. Comment utiliser la méthode POST !
    Merci d'avance !
  • schlumschlum Membre
    20:26 modifié #46
    dans 1199565701:

    En tout cas ça marche :D J'ai pris [[NSDate date] timeIntervalSince1970];


    Moins optimisé que ce que j'ai mis au dessus  :P NSDate est un wrapper au-dessus de gettimeofday je pense...
  • AliGatorAliGator Membre, Modérateur
    20:26 modifié #47
    Oui mais comme Môssieur a peur du C (faut pas chercher à  comprendre, il aime pas c'est tout :P) la version consistant à  passer par l'objet Cocoa NSDate est plus compréhensible pour lui je pense ;D (faut bien se mettre à  son niveau  :))
  • 20:26 modifié #48
    dans 1199581436:

    Oui mais comme Môssieur a peur du C (faut pas chercher à  comprendre, il aime pas c'est tout :P) la version consistant à  passer par l'objet Cocoa NSDate est plus compréhensible pour lui je pense ;D (faut bien se mettre à  son niveau  :))

    De suite la grosse tête  :P spèce de canard va
Connectez-vous ou Inscrivez-vous pour répondre.