Невозможно отправить обновления в Twitter, используя следующий код. Нет ошибок - PullRequest
2 голосов
/ 23 апреля 2011

Я попробовал следующий код:

 static void PostTweetanother(string username, string password, string tweet)
    {
        try
        {
            // encode the username/password
            string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
            // determine what we want to upload as a status
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes("status=" + tweet);
            // connect with the update page
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://twitter.com/statuses/update.xml");
            // set the method to POST
            request.Method = "POST";
            request.ServicePoint.Expect100Continue = false; // thanks to argodev for this recent change!
            // set the authorisation levels
            request.Headers.Add("Authorization", "Basic " + user);
            request.ContentType = "application/x-www-form-urlencoded";
            // set the length of the content
            request.ContentLength = bytes.Length;

            // set up the stream
            Stream reqStream = request.GetRequestStream();
            // write to the stream
            reqStream.Write(bytes, 0, bytes.Length);
            // close the stream
            reqStream.Close();
        }
        catch (Exception ex) { throw ex; }
    }

Я также попробовал этот код:

 static void PostTweet(string username, string password, string tweet)
    {
        // Create a webclient with the twitter account credentials, which will be used to set the HTTP header for basic authentication
        WebClient client = new WebClient { Credentials = new NetworkCredential { UserName = username, Password = password } };

        // Don't wait to receive a 100 Continue HTTP response from the server before sending out the message body
        ServicePointManager.Expect100Continue = false;

        // Construct the message body
        byte[] messageBody = Encoding.ASCII.GetBytes("status=" + tweet);

        // Send the HTTP headers and message body (a.k.a. Post the data)
        client.UploadData("http://twitter.com/statuses/update.xml", messageBody);
    }

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Здесь есть несколько проблем.Во-первых, API REST Twitter больше не поддерживает базовую аутентификацию;Вы должны использовать OAuth сейчас.Во-вторых, вы ссылаетесь на неверную конечную точку;вам следует вызывать statuses / update , например http://api.twitter.com/1/statuses/update.xml (хотя я всегда рекомендую использовать JSON поверх XML при взаимодействии с API Twitter.)

, поскольку вы должны пройти аутентификацию для публикации в Twitterи, поскольку вы должны использовать OAuth, последнее, что я бы порекомендовал, это использовать библиотеку Twitter, например Twitterizer , для взаимодействия с API Twitter.

Доступ к Твиттеру в настоящее время является довольно популярным товаром, и есть много хороших библиотек (которые вам не нужно поддерживать). Что вы пытаетесь сделать: опубликовать обновление статуса, переслать вследующий упрощенный код (пример использует Twitterizer):

//reference Twitterizer2.dll

var tokens = new Twitterizer.OAuthTokens {
    AccessToken = @"myAccessToken",
    AccessTokenSecret = @"myAccessTokenSecret",
    ConsumerKey = @"myConsumerKey",
    ConsumerSecret = @"myConsumerSecret"
};

// Post the update to twitter
var statusResponse = Twitterizer.TwitterStatus.Update(tokens, 
    "I am your status update!");
if (statusResponse.Result != Twitterizer.RequestResult.Success)
    return;

// Fetch the authenticated user's timeline, uses statuses/user_timeline
// under the hood
var timelineResponse = Twitterizer.TwitterTimeline.UserTimeline(tokens);
if (timelineResponse.Result != Twitterizer.RequestResult.Success)
    return;

foreach (var status in timelineResponse.ResponseObject)
{
    Console.WriteLine(status.Text);
}

Чтобы получить учетные данные OAuth, вам необходимо зарегистрировать приложение под своей учетной записью по адресу https://dev.twitter.com/apps/new. Как только это будет сделано, вы можетенайдите ключ и секрет потребителя на главной странице для только что созданного приложения, а ваш токен и секретный ключ доступа появятся на странице, связанной с пунктом меню Мой токен доступа в правой части страницы.

Использование этого единого набора учетных данных будет работать нормально, если у вас есть только один пользователь, и то, что иллюстрирует пример кода, называется шаблон токена единого доступа .Однако, если вы хотите разрешить другим пользователям использовать ваше приложение под своими именами, вам нужно выполнить так называемый «танец OAuth», чтобы получить токены доступа для каждого из ваших пользователей.

Более подробную информацию о полном потоке OAuth можно получить по http://dev.twitter.com/auth,, а обмен токенами введен специально здесь .

0 голосов
/ 23 апреля 2011

Недавно я прочитал в Интернете, что твиттер закрыл свой API Rest для сторонних клиентов, так что может быть вы не можете публиковать обновления из-за этого факта. Это мое мнение, поэтому я думаю, что невозможно делать то, что ты хочешь делать.

До встречи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...