Добавление media_ids к вызову API Twitter вызывает проблему аутентификации - PullRequest
1 голос
/ 08 марта 2019

У меня есть простая веб-страница, на которой можно создать только текстовый твит через API REST Twitter на https://api.twitter.com/1.1/statuses/update.json.Я также могу загрузить изображение в формате JPG в Twitter с помощью https://upload.twitter.com/1.1/media/upload.json и вернуть числовое значение media_id успешно. Что я не могу сделать, так это соединить эти два вместе для создания твита с изображением: он получит код состояния HTTP 401, если я добавлю в media_id!

Я использую ASP.NET (у меня есть обаVB и C # примеры) но я ожидаю, что проблема не является специфичной для этого языка.Единственные два бита кода твита, которые я изменяю, - это то, где создается одна и та же «строка запроса»:

var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&status={6}&media_ids={7}";
var baseString = string.Format(baseFormat, oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version, Uri.EscapeDataString(TweetText), TwitterMediaID);

и

var postBody = "status=" + Uri.EscapeDataString(TweetText) + "&media_ids=" + TwitterMediaID;
using (System.IO.Stream stream = request.GetRequestStream())
        {
            byte[] content = System.Text.ASCIIEncoding.ASCII.GetBytes(postBody);
            stream.Write(content, 0, content.Length);
        }

Все, что на самом деле делает, это добавляет &media_ids=1104003004334784512до конца строки.Остальная часть моего кода не меняется.

JSON, который мне возвращается: {"errors":[{"code":32, "message":"Could not authenticate you."}]}

Если я удаляю &media_ids=12345678901234567, то код успешен (код состояния HTTP 200 и многополезного JSON вернул)Я читал различные блоги, в которых упоминалось, что у людей возникали периодические ошибки HTTP 401 при использовании media_ids, которые вообще не имели отношения к аутентификации, но ни одно из предлагаемых ими решений не применимо к моей рассылке.

ДокументацияПредполагается, что мой media_id работает в течение 2 часов, так как я могу вносить беспорядок в аспект аутентификации, когда мои только текстовые твиты появляются в моем профиле Twitter в порядке?

1 Ответ

1 голос
/ 08 марта 2019

Twitter требует, чтобы запросы API использовали OAuth 1.0a аутентификация . Одно предупреждение: подпись HMAC-SHA1 должна быть создана в очень специфическом формате.

В этом случае требуется сортировка baseFormat в алфавитном порядке - см. https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html

...