Аутентификация и запрос временной шкалы пользователя с помощью API Twitter 1.1 oAuth

Сегодня утром я получил страшный «API REST VST Twitter больше неактивен. Перейдите на API v1.1. ‘ ошибки на нескольких моих сайтах.

Раньше я использовал javascript / json для этих вызовов на http://api.twitter.com/1/statuses/user_timeline.json ? для отображения временной шкалы.

Поскольку это больше не доступно, мне нужно принять новый процесс 1.1 API.

Мне нужно сделать следующее, используя объекты HttpWebRequest, а не стороннее приложение:

  1. Аутентификация с использованием ключа oauth и секретного
  2. Сделайте аутентифицированный вызов, чтобы вернуться к отображению временной шкалы пользователей

Вот что я сделал, чтобы это работало на простом примере.

Мне пришлось генерировать ключ для пользователя oAuth и секрет из Twitter:

https://dev.twitter.com/apps/new

Сначала я дезертировал объект аутентификации, чтобы получить токен и ввести его обратно, чтобы аутентифицировать вызов временной шкалы.

Вызов временной шкалы просто читает json, поскольку это все, что мне нужно сделать, вы можете захотеть десериализовать его самостоятельно в объект.

Я создал проект для этого по адресу: https://github.com/andyhutch77/oAuthTwitterWrapper

Обновление. Я обновил проект github, чтобы включить как демонстрационные примеры приложений asp .net для веб-приложений, так и mvc и nuget install.

// You need to set your own keys and screen name var oAuthConsumerKey = "superSecretKey"; var oAuthConsumerSecret = "superSecretSecret"; var oAuthUrl = "https://api.twitter.com/oauth2/token"; var screenname = "aScreenName"; // Do the Authenticate var authHeaderFormat = "Basic {0}"; var authHeader = string.Format(authHeaderFormat, Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(oAuthConsumerKey) + ":" + Uri.EscapeDataString((oAuthConsumerSecret))) )); var postBody = "grant_type=client_credentials"; HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(oAuthUrl); 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"); WebResponse authResponse = authRequest.GetResponse(); // deserialize into an object TwitAuthenticateResponse twitAuthResponse; using (authResponse) { using (var reader = new StreamReader(authResponse.GetResponseStream())) { JavaScriptSerializer js = new JavaScriptSerializer(); var objectText = reader.ReadToEnd(); twitAuthResponse = JsonConvert.DeserializeObject(objectText); } } // Do the timeline var timelineFormat = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={0}&include_rts=1&exclude_replies=1&count=5"; var timelineUrl = string.Format(timelineFormat, screenname); HttpWebRequest timeLineRequest = (HttpWebRequest)WebRequest.Create(timelineUrl); var timelineHeaderFormat = "{0} {1}"; timeLineRequest.Headers.Add("Authorization", string.Format(timelineHeaderFormat, twitAuthResponse.token_type, twitAuthResponse.access_token)); timeLineRequest.Method = "Get"; WebResponse timeLineResponse = timeLineRequest.GetResponse(); var timeLineJson = string.Empty; using (timeLineResponse) { using (var reader = new StreamReader(timeLineResponse.GetResponseStream())) { timeLineJson = reader.ReadToEnd(); } } public class TwitAuthenticateResponse { public string token_type { get; set; } public string access_token { get; set; } } 

Создал только JS-решение для получения сообщений Twitter на вашем сайте без использования нового API – теперь можно указать количество твитов: http://goo.gl/JinwJ

  • Автоматически распаковывать ответ gzip через WebClient.DownloadData
  • Как я могу заставить WebClient использовать Cookies?
  • Как я могу программным образом удалить 2 ограничения соединения в WebClient
  • Символы в строке изменились после загрузки HTML из Интернета
  • Войдите на сайт, через C #
  • Как изменить таймаут на объекте .NET WebClient
  • WebClient vs. HttpWebRequest / HttpWebResponse
  • Как заполнить формы и отправить с помощью Webclient в C #
  • C # WebClient отключить кеш
  • Возможно ли передать аутентификацию из Webbrowser в WebRequest
  • Печально известная, но без ответа проблема загрузки файла, когда требуется защита Windows
  • Interesting Posts
    Давайте будем гением компьютера.