IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

Nouveau Api Twitter


Sujet :

Web & réseau Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Par défaut Nouveau Api Twitter
    Bonjour a vous,

    J'ai utilisé delphi pendant des année pour afficher des tweets comme flux RSS. Ca a marché sans problemes avec le lien suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url := 'https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=wcjc99';

    Neanmoin, deput pas longtemps, Twitter a changé son API qui exige maintenant une authentification "oauth". J'ai enregistrer mon App avec Twitter et a obtenue les different keys et tokens. Neanmoins, quand j'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url := 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=wcjc99';
    je reçois un erreur "Bad Authentication data". Je ne sais pas comment integrer les tokens et keys dans la demande.

    Merci pour votre aide.

    Dave

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Les identifiants si c'est une authentication basic ne passe pas sur le GET mais sont affecté dans les Headers HTTP
    Avec un THTTPRio : Exemple d'utilisation de HttpAddRequestHeaders et la MDSN de HttpAddRequestHeaders
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Par défaut
    merci pour l'information. Je ne connais pas HttpRio.

    Voici ce que j'ai actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TForm1.Button4Click(Sender: TObject);
    Var
      MyRio: THTTPRIO;
    begin
      MyRio := THTTPRIO.Create(self);
      MyRio.HTTPWebNode.OnBeforePost := HTTPRIO1HTTPWebNode1BeforePost;
      MyRio.URL := 'https://api.twitter.com/oauth2/token?grant_type=client_credentials';
     
      //Post, Get, Execute, Navigate ????
     
      MyRio.Free;
    end;
     
    procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp;
      Data: Pointer);
    Var
      s: String;
    begin
        s := 'Authorization: Basic '+EncodeBase64(ConsumerKey + ':' +  ConsumerSecret); 
        if not HttpAddRequestHeaders(Data, PChar(s), Length(s), HTTP_ADDREQ_FLAG_ADD) then ShowMessage('Error');
    end;

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Deux TStream Request et Response
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyRio.HTTPWebNode.Execute(Request, Response);
    Mais c'est conçu pour du SOAP pas pour du RSS

    Le code important était l'appel à HttpAddRequestHeaders qui est une API Windows,
    c'est le plus bas niveau que je connaisse car THTTPRio utilise un HINTERNET en interne sous Windows

    Tu peux tout faire à la main via InternetOpen\InternetConnect\HttpOpenRequest ... cela utiliser un HINTERNET

    Tu peux aussi utiliser un TIdHTTP : 401 With Indy IdHttp Digest Authentication in Delphi XE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.IdHTTP1Authorization(Sender: TObject;
      Authentication: TIdAuthentication; var Handled: Boolean);
    begin
    Authentication.Username:='user';
    Authentication.Password:='passs'; 
    if Authentication is TIdDigestAuthentication then
      begin
        showmessage('onAuthorization: '+Authentication.Authentication);
        TIdDigestAuthentication(IdHTTP1.Request.Authentication).Uri:=IdHTTP1.Request.URL;
        TIdDigestAuthentication(Authentication).Method := 'GET';
      end;
    Handled:=true;
    end;


    tu n'as pas fourni le code que tu utilises actuellement,
    on ignore les composants que tu utilises,
    j'ai donc lancé une réponse au hasard

    De plus, les headers HTTP ne sont qu'un idée, ce n'est pas forcément le moyen d'identification de Twitter

    Il te faut consulter les API Twitter pour connaitre la démarche d'authentification

    Si cela se trouve, ces Tokens sont les données d'un certifcation X509 : Certificat HTTPS avec indy+OpenSSL
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Par défaut Authentification
    Desolé pour la reponse tardive. Pas mal occupé ce derniere temps et je voulais essaier plusieurs pistes (RIO, Socks, TWebBrowser etc.). Finalement, je n'ai pas avancé un seul pas et je suis revenue au code suivant :

    J'ai enregistré un application Test avec Twitter dont les codes access en bas sont valable !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, EncdDecd, IdHttp, StdCtrls, IdSSLOpenSSL;
     
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
    Const
      ConsumerKey: String = 'd5TXrGHSb8PfG1iMKsnTVg'; {Valid Credentials for a temporary Twitter Test Application}
      ConsumerSecret: String = 'UAtCg1c4nRGpDfUQfglqEHyRpVwwy8Mz2txZCq4O4s';
      RessourcePost: String = 'https://api.twitter.com/oauth2/token?grant_type=client_credentials';
      RessourceHost: String = 'api.twitter.com';
      ContentType: String = 'application/x-www-form-urlencoded;charset=UTF-8';
     
    implementation
     
    {$R *.dfm}
     
    Function EncodeBase64(Input: String): String;
    Var
      fstream, fStringStream: TStringStream;
    Begin
      fstream := TStringStream.Create(Input);
      fStringStream := TStringStream.create('');
      EncodeStream(fstream, fStringStream);
      Result := fStringStream.DataString;
    End;
     
    procedure TForm1.Button2Click(Sender: TObject);
    Var
      MyHttp: TIdHttp;
      EncodedCredit: String;
      Result: TMemoryStream;
      Userpath: String;
    begin
      {Step 1: Encode consumer key and secret
      https://dev.twitter.com/docs/auth/application-only-auth}
      EncodedCredit := EncodeBase64(ConsumerKey + ':' + ConsumerSecret);
      {Step 2: Obtain a bearer token
      https://dev.twitter.com/docs/auth/application-only-auth}
      MyHttp := TIdHttp.Create(nil);
      try
        MyHttp.Request.ContentType := ContentType;
        MyHttp.Request.Accept := 'application/json';
        MyHttp.Request.Method := 'Post';
        MyHttp.Request.BasicAuthentication := False;
        MyHttp.Request.CustomHeaders.Add('Authorization: Basic '+EncodedCredit);
        MyHttp.Request.Host := RessourceHost;
        MyHttp.Request.URL := RessourcePost;
        {Temporary load the Library for OpenSSL}
        Userpath := 'J:\';
        LoadLibrary(PWideChar(Userpath+'libeay32.dll'));
        LoadLibrary(PWideChar(Userpath+'ssleay32.dll'));
        MyHttp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
     
        Result := TMemoryStream.Create;
        MyHttp.Post(RessourcePost, Result);
        Memo1.Lines.LoadFromStream(Result);
      finally
        FreeAndNil(Result);
        MyHttp.Free;
      end;
     
    end;
     
    end.
    Je recoit toujour un erreur d'authentification.

    Concernant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Authentication.Username:='user';
    Authentication.Password:='passs';
    je ne suis pas sure. Le site Twitter demande un header avec le contenue consumer key and secret encodé :"Authorization: Basic eHZ6MWV2R ... o4OERSZHlPZw==".

    La demande est "Application-only" (https://dev.twitter.com/docs/api/1.1/post/oauth2/token) il n'y a pas authentification d'un utilisateur ou bien avec UserName et Password, on demande le Consumer Key et Secret ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Par défaut Indy Log (Sent)
    I added a Indy Log event and get following for the Sent event :

    POST /oauth2/token?grant_type=client_credentials HTTP/1.0<EOL>Content-Type: application/x-www-form-urlencoded; charset=UTF-8<EOL>Content-Length: 0<EOL>Authorization: Basic ZDVUWHJHSFNiOFBmRzFpTUtzblRWZzpVQXRDZzFjNG5SR3BEZlVRZmdscUVIeVJwVnd3eThNejJ0<EOL>eFpDcTRPNHM=<EOL>Host: api.twitter.com:443<EOL>Accept: application/json<EOL>Accept-Encoding: identity<EOL>User-Agent: Mozilla/3.0 (compatible; Indy Library)<EOL><EOL>

    I noticed that the <EOL> is add by itself at various point, even cutting the Encoded credits in two.

Discussions similaires

  1. API twitter et facebook
    Par Invité dans le forum Android
    Réponses: 2
    Dernier message: 15/06/2011, 21h29
  2. utilisatation de l'API twitter
    Par sarrajbs dans le forum Android
    Réponses: 0
    Dernier message: 18/04/2011, 19h36
  3. utilisation api twitter
    Par l-amoureu dans le forum Android
    Réponses: 0
    Dernier message: 16/03/2011, 17h25
  4. [Web Service][API Twitter] Utilisation
    Par ghaitoute dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 17/05/2010, 18h41
  5. Utilisation de l'API Twitter: méthode search
    Par mintoo dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/03/2010, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo