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

VB.NET Discussion :

twitter Oauth et requetes


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Points : 86
    Points
    86
    Par défaut twitter Oauth et requetes
    Bonsoir,
    J'ai qlq soucis avec Oauth pour twitter.
    Ci-dessous le code pour la création de l'OAuth et l'envoie de la requeste :
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
        Public oauth_consumer_key As String = "xxxx"
        Public oauth_consumer_secret As String = "xxxx"
        Public oauth_token As String = "xxxx-xxxxxxx"
        Public oauth_token_secret As String = "xxxxxx"
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            UpdateAuthorization()
        End Sub
     
        Sub UpdateAuthorization()
            Dim url As String = "https://api.twitter.com/1.1/search/tweets.json?q=SpaceBabies&lang=en&result_type=mixed&count=2"
     
            '==========================
            'GET TOKEN SIGNATURE OAUTH
            Dim oauth_version As String = "1.0"
            Dim oauth_signature_method As String = "HMAC-SHA1"
            Dim oauth_nonce As String = Convert.ToBase64String(New ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()))
     
            Dim timeSpan As TimeSpan = DateTime.UtcNow - New DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)
            Dim oauth_timestamp As String = Convert.ToInt64(timeSpan.TotalSeconds).ToString()
     
            Dim oauth_signature As String = GeneraOAuthSignature(url, _
                                                                  oauth_nonce, _
                                                                  oauth_signature_method, _
                                                                  oauth_timestamp, _
                                                                  oauth_version)
            '==========================
            'HEADER FORMAT OAUTH
            Dim headerFormat As String = "OAuth oauth_nonce=""{0}"", oauth_signature_method=""{1}"", oauth_timestamp=""{2}"", oauth_consumer_key=""{3}"", oauth_token=""{4}"", oauth_signature=""{5}"", oauth_version=""{6}"""
     
            Dim authHeader As String = String.Format(headerFormat, Uri.EscapeDataString(oauth_nonce), Uri.EscapeDataString(oauth_signature_method), Uri.EscapeDataString(oauth_timestamp), Uri.EscapeDataString(oauth_consumer_key), _
                        Uri.EscapeDataString(oauth_token), Uri.EscapeDataString(oauth_signature), Uri.EscapeDataString(oauth_version))
     
            '==========================
            'HTTP REQUEST
            ServicePointManager.Expect100Continue = False
     
            Dim req As WebRequest
     
            req = WebRequest.Create(url)
            req.Timeout = -1
            req.Headers.Add("Authorization", authHeader)
     
            ' c'est ici que ça se plante généralement ********** erreur 401 probleme d'OAuth
            Dim response As WebResponse = req.GetResponse()
            ' Get the stream containing content returned by the server.
            Dim dataStream As Stream = response.GetResponseStream()
            ' Open the stream using a StreamReader for easy access.
            Dim reader As New StreamReader(dataStream)
            ' Read the content.
            Dim responseFromServer As String = reader.ReadToEnd()
            ' Clean up the streams and the response.
            req.Abort()
            reader.Close()
            response.Close()
     
            RichTextBox1.Text = responseFromServer
        End Sub
     
        Function GeneraOAuthSignature(ByVal stream_url As String, _
                                  ByVal oauth_nonce As String, _
                                  ByVal oauth_signature_method As String, _
                                  ByVal oauth_timestamp As String, _
                                  ByVal oauth_version As String) As String
            'The next step is to generate an encrypted oAuth signature which Twitter will use to validate the request.
            'To do this, all of the request data is concatenated into a particular format as follows
            Dim baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" & _
                             "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}"
     
            Dim baseString As String = String.Format(baseFormat, _
                            oauth_consumer_key, _
                            oauth_nonce, _
                            oauth_signature_method, _
                            oauth_timestamp, _
                            oauth_token, _
                            oauth_version)
     
            baseString = String.Concat("GET&", Uri.EscapeDataString(stream_url), "&", Uri.EscapeDataString(baseString))
     
            'Using this base string, we then encrypt the data using a composite of the secret keys and the HMAC-SHA1 algorithm.
            Dim compositeKey As String = String.Concat(Uri.EscapeDataString(oauth_consumer_secret), "&", Uri.EscapeDataString(oauth_token_secret))
            Dim oauth_signature As String
     
            Dim hasher As HMACSHA1 = New HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey))
            Using hasher
                oauth_signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)))
            End Using
     
            Return oauth_signature
        End Function
    Tout ce code semble fonctionner car les codes OAuth fonctionnent, testé sur le site twitter application.
    Je ne comprends pas ce qui se passe.
    je ne sais pas si c'est l'OAuth, la construction de la signature, la requete, la webrequest ou encore la response...

    Avez-vous une idée car là, ça fait 2 jours que je suis dessus et je ne sais plus quoi faire
    Deplus, je dois récupérer ce flux en XML et donc le parser par la suite, mais là je pourrais me débrouiller

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tout ce code semble fonctionner car les codes OAuth fonctionnent, testé sur le site twitter application
    OK, mais alors c'est quoi qui ne marche pas ? Si tu ne le dis pas, ça va être difficile de t'aider
    Indique les messages d'erreurs éventuels, le contenu des réponses, etc
    Et si tu l'as pas déjà fait, essaie d'utiliser Fiddler pour examiner les échanges HTTP

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Points : 86
    Points
    86
    Par défaut
    Bonjour,
    J'ai downloadé Fiddler et je vais regarder ça de plus près.
    En revanche, je vous ai mis tout mon code afin que vous puissiez tester avec vos propres codes Oauth (les 4 premières lignes du code) et vérifier si cela fonctionne avec vous.
    Il suffit de le coller dans un formulaire et créer le bouton2, la ritchtextbox1.
    ci-dessous les imports :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Imports System.Text
    Imports System.Net
    Imports System.IO
    Imports System.Security.Cryptography
    Imports System.Web
    le code d'erreur retourné sur la ligne 46 est : "Le serveur distant a retourné une erreur : (401) Non autorisé"
    ce message arrive aussi avec cette requete (prise directement sur le site twitter/doc api) :
    - https://api.twitter.com/1.1/statuses...terapi&count=2
    l'erreur 401 semble parler d'une "rate limite" mais dans ma requete je ne demande que les 2 derniers messages (count=2)... donc je ne vois pas où peut être le problème...
    Merci de votre aide.
    Patrick

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par patrickvier Voir le message
    l'erreur 401 semble parler d'une "rate limite"
    Je ne sais pas où tu as vu ça... L'erreur HTTP 401 (Unauthorized) signifie que tu n'es pas authentifié.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Soit dit en passant, il y a des libs toutes faites pour utiliser l'API de Twitter, tu n'as pas besoin de tout refaire toi-même

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Points : 86
    Points
    86
    Par défaut
    Bonjour TomLev,
    Tu as surement raison, mais j'ai beau chercher je ne trouve rien de clair et de simple.
    S'il existe qlq chose comme :
    1) saisie des codes identification OAuth (ceux fournit par twitter)
    2) saisie de la requete (Myreq = https....q=@
    3) Send(les arguments....) - GET
    4) Response(my format(json, html, xml,...))
    ça existe ?
    Sinon as-tu des pistes ?
    Merci

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Mais pourquoi est-ce que tu tiens à faire les requêtes manuellement ? Les libs toutes faites permettent de travailler à un plus haut niveau, sans avoir à se préoccuper d'HTTP, de JSON, d'OAuth (enfin un peu quand même puisqu'il faut envoyer l'utilisateur vers l'URL d'authorisation), etc...

    https://dev.twitter.com/docs/twitter-libraries

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Points : 86
    Points
    86
    Par défaut
    Bahh!! voila c'est tout à fait ce que je souhaite avoir et je te cite :
    Les libs toutes faites permettent de travailler à un plus haut niveau, sans avoir à se préoccuper d'HTTP, de JSON, d'OAuth (enfin un peu quand même puisqu'il faut envoyer l'utilisateur vers l'URL d'authorisation)
    En effet, LINQ2Twitter semble être une bonne alternative ainsi que Tweetinvi afin de passer le BARRAGE de l'api 1.1
    A voir, cela à l'air assez "simple", mais je suis sur qu'il y aura encore des problèmes...
    Patrick

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Points : 86
    Points
    86
    Par défaut
    Pour en finir avec ce post, je vous invite à regarder de prèt TWEETINVI qui me semble être la plus simple à utiliser.
    LINQ2Twitter, celle là me génère pas mal d"erreur et ne semble pas tres documentée.
    Bon wkend.
    Patrick

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.4] Twitter et OAuth
    Par alainyvan dans le forum Langage
    Réponses: 1
    Dernier message: 09/06/2015, 13h37
  2. Requête HTTP POST sur Twitter avec OAuth
    Par e-zaz dans le forum Services Web
    Réponses: 2
    Dernier message: 23/10/2014, 13h23
  3. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  4. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

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