


Comment puis-je m'authentifier avec l'API Twitter v1.1 OAuth et récupérer la chronologie d'un utilisateur à l'aide de HttpWebRequest ?
Utilisation de HttpWebRequest pour accéder à l'API Twitter v1.1 : authentification OAuth et récupération de la chronologie
Ce guide explique comment s'authentifier auprès de l'API Twitter v1.1 à l'aide d'OAuth et récupérer ensuite la chronologie d'un utilisateur via HttpWebRequest. L'ancienne API v1 est obsolète ; cette méthode utilise le protocole mis à jour.
Étapes d'authentification OAuth :
- Obtenez votre clé de consommateur et votre secret OAuth sur le portail des développeurs Twitter.
- Construisez une demande d'authentification ciblée sur
https://api.twitter.com/oauth2/token
. L'en-tête de la demande doit inclure votre clé de consommateur et votre secret à l'aide d'une chaîne codée en Base64. - Envoyer une requête POST avec le paramètre body
grant_type=client_credentials
. - Analysez la réponse JSON pour extraire le jeton d'accès et le type de jeton.
Récupération de la chronologie de l'utilisateur :
- Formuler une demande à
https://api.twitter.com/1.1/statuses/user_timeline.json
. Incluez les paramètres de requête nécessaires tels quescreen_name
,include_rts
,exclude_replies
etcount
. - Incorporez le jeton d'accès (obtenu lors de l'étape d'authentification) dans l'en-tête d'autorisation.
- Émettez une requête GET et analysez la réponse JSON pour accéder aux données de la chronologie.
Exemple de code (C#) :
// Assume these variables are pre-populated: // oAuthConsumerKey: Your OAuth consumer key // oAuthConsumerSecret: Your OAuth consumer secret // screenname: The target Twitter username // Authentication string authHeaderFormat = "Basic {0}"; string authHeader = string.Format(authHeaderFormat, Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(oAuthConsumerKey) + ":" + Uri.EscapeDataString(oAuthConsumerSecret)))); string postBody = "grant_type=client_credentials"; HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create("https://api.twitter.com/oauth2/token"); authRequest.Headers.Add("Authorization", authHeader); authRequest.Method = "POST"; authRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; authRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; using (Stream stream = authRequest.GetRequestStream()) { byte[] content = ASCIIEncoding.ASCII.GetBytes(postBody); stream.Write(content, 0, content.Length); } authRequest.Headers.Add("Accept-Encoding", "gzip"); HttpWebResponse authResponse = (HttpWebResponse)authRequest.GetResponse(); // Deserialize authentication response TwitterAuthResponse authResponseObject; using (authResponse) { using (StreamReader reader = new StreamReader(authResponse.GetResponseStream())) { string json = reader.ReadToEnd(); authResponseObject = JsonConvert.DeserializeObject<TwitterAuthResponse>(json); } } // Timeline Request string timelineFormat = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={0}&include_rts=1&exclude_replies=1&count=5"; string timelineUrl = string.Format(timelineFormat, screenname); HttpWebRequest timelineRequest = (HttpWebRequest)WebRequest.Create(timelineUrl); string timelineHeaderFormat = "{0} {1}"; timelineRequest.Headers.Add("Authorization", string.Format(timelineHeaderFormat, authResponseObject.token_type, authResponseObject.access_token)); timelineRequest.Method = "GET"; HttpWebResponse timelineResponse = (HttpWebResponse)timelineRequest.GetResponse(); // Parse timeline response string timelineJson; using (timelineResponse) { using (StreamReader reader = new StreamReader(timelineResponse.GetResponseStream())) { timelineJson = reader.ReadToEnd(); } } // Process the timelineJson data.
N'oubliez pas de remplacer les espaces réservés par vos clés et votre nom d'écran réels. La gestion des erreurs et la gestion des exceptions doivent être ajoutées pour une utilisation en production. Cet exemple amélioré clarifie la dénomination des variables et améliore la lisibilité. Vous devrez avoir le Newtonsoft.Json
package NuGet installé pour JsonConvert
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

S'il itère lors de la suppression d'un élément, vous devez éviter d'utiliser un itérateur défaillant. ① La manière correcte consiste à l'utiliser = ve.erase (it) et à utiliser l'itérateur valide renvoyé par effacement pour continuer à traverser; ② L'idiome recommandé "effacer" pour la suppression par lots: Vec.erase (std :: retire_if (ve.begin (), ve.end (), condition), ve.end ()), qui est sûr et efficace; ③ Vous pouvez utiliser un itérateur inversé pour supprimer de l'arrière-plan à l'avant, la logique est claire, mais vous devez faire attention à la direction de l'état. Conclusion: Mettez toujours à jour l'itérateur avec la valeur de retour d'effacement, interdisant les opérations sur l'itérateur défaillant, sinon un comportement non défini en résultera.

La réponse est: utilisez le constructeur Std :: String pour convertir le tableau char en chaîne std ::. Si le tableau contient l'intermédiaire «\ 0», la longueur doit être spécifiée. 1. Pour les chaînes de style C se terminant par '\ 0', utilisez Std :: Stringtr (chararray); pour terminer la conversion; 2. Si le tableau char contient le «\ 0» du milieu mais doit convertir les n caractères des premiers, utilisez Std :: stringstr (chararray, longueur); pour spécifier clairement la longueur; 3. Lors du traitement d'un tableau de taille fixe, assurez-vous qu'il se termine par «\ 0» puis convertissez-le; 4. Utiliser Str.Assign (Chararray, Chararray Strl

Theautokeywordinc décecestypeypeofaVariableFromitsInitializer, faisant du codécleanerandMoremainableable.1.itreduceSverbosity, en particulier avec des ennuifs de type.

Utilisez std :: source_location :: current () comme paramètre par défaut pour capturer automatiquement le nom de fichier, le numéro de ligne et le nom de la fonction du point d'appel; 2. Vous pouvez simplifier les appels de journal via des macros telles que #Definelog (msg) journal (msg, std :: source_location :: current ()); 3. Vous pouvez étendre le contenu du journal avec le niveau de journal, l'horodatage et d'autres informations; 4. Pour optimiser les performances, les noms de fonction peuvent être omis ou les informations de localisation peuvent être désactivées dans la version de version; 5. Column () et d'autres détails sont rarement utilisés, mais sont disponibles. L'utilisation de std :: source_location peut considérablement améliorer la valeur de débogage des journaux avec des frais généraux extrêmement faibles sans transmettre manuellement dans FIL

Memory_Order_Relaxed convient aux scénarios où seule l'atomicité est requise sans synchronisation ou garantie de commande, telles que les compteurs, les statistiques, etc. 1. Lors de l'utilisation de Memory_Order_Relaxed, les opérations peuvent être réorganisées par le compilateur ou le processeur tant que la dépendance aux données unique n'est pas détruite. 2. Dans l'exemple, plusieurs threads incrément le compteur atomique, car ils ne se soucient que de la valeur finale et l'opération est cohérente, l'ordre mémoire détendu est sûr et efficace. 3. Fetch_add et charge ne fournissent pas de synchronisation ou de contraintes séquentielles lors de l'utilisation de détente. 4. Dans l'exemple d'erreur, la synchronisation du producteur-consommateur est implémentée à l'aide de détente, ce qui peut amener le consommateur à lire les valeurs de données unpulées car il n'y a pas de garantie d'ordre. 5. La bonne façon est

La méthode la plus courante pour trouver des éléments vectoriels en C est d'utiliser STD :: Find. 1. Utilisez STD :: Rechercher pour rechercher avec la plage d'itérateur et la valeur cible. En comparant si l'itérateur retourné est égal à fin (), nous pouvons juger si elle est trouvée; 2. Pour les types personnalisés ou les conditions complexes, STD :: Find_if doit être utilisé et les fonctions de prédicat ou les expressions de lambda doivent être transmises; 3. Lors de la recherche de types standard tels que des chaînes, vous pouvez directement passer la chaîne cible; 4. La complexité de chaque recherche est O (n), qui convient aux données à petite échelle. Pour des recherches fréquentes, vous devriez envisager d'utiliser STD :: SET ou STD :: UNCORD_SET. Cette méthode est simple, efficace et largement applicable à divers scénarios de recherche.

STD :: Mutex est utilisé pour protéger les ressources partagées pour empêcher la concurrence des données. Dans l'exemple, le verrouillage automatique et le déverrouillage de Std :: Lock_guard sont utilisés pour assurer la sécurité multi-thread; 1. Utilisation de STD :: Mutex et STD :: Lock_guard peut éviter les risques anormaux apportés par la gestion manuelle des verrous; 2. Les variables partagées telles que les compteurs doivent être protégées avec Mutex lors de la modification des multiples multiples; 3. La gestion des serrures de style Raii est recommandée pour garantir la sécurité des exceptions; 4. Évitez les blocs de non-blocs et plusieurs verrous dans un ordre fixe; 5. Tout scénario d'accès multi-thread aux ressources partagées doit utiliser la synchronisation Mutex, et le programme final sort correctement attendu: 10000 et réel: 10000.

La surcharge de l'opérateur en C permet d'attribuer de nouveaux comportements des opérateurs standard aux types personnalisés, 1. Renvoie de nouveaux objets via la surcharge de la fonction membre; 2. Overload = modifier l'objet actuel et la référence de retour; 3. Fonction d'amie surcharge
