Приложение Twitter и Winform C # заставляет меня лысеть - PullRequest
1 голос
/ 16 декабря 2011

Хорошо, твиттер может быть очень полезен для социальных сетей, но для небольшого приложения, которое я пытаюсь создать просто для удовольствия, превратилось в кошмар. Я искал везде и не могу найти хорошее объяснение того, как использовать API.

Я использую API-интерфейс TweetSharp, и все, что я хочу сделать, - это позволить пользователю разрешить моему приложению и иметь возможность публиковать сообщения из приложения в своем твиттере.

Моя проблема возникает, когда приложение выдает пин-код для ввода пользователем ... где пользователь будет вводить его в? Итак, это то, что я имею до сих пор ... если кто-то может помочь, я был бы очень рад, поэтому я могу перестать тянуть свои волосы ..

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TweetSharp;
using System.Configuration;
using Hammock.Authentication.OAuth;
using System.Diagnostics;

namespace testtweet
{
    public partial class Form1 : Form
    {
        //I already have these values not showing here for obvious reasons.
        TwitterService service = new TwitterService("ConsumerKey", "ConsumerSecret");
        public Form1()
        {
            InitializeComponent();
            // Pass your credentials to the service

            // Step 1 - Retrieve an OAuth Request Token
            OAuthRequestToken requestToken = service.GetRequestToken();

            // Step 2 - Redirect to the OAuth Authorization URL
            Uri uri = service.GetAuthorizationUri(requestToken);
            Form2 frm = new Form2(uri.ToString());
            frm.Show();

            OAuthRequestToken requestToken = service.GetRequestToken();
            // Step 3 - Exchange the Request Token for an Access Token
            string verifier = "123456"; // <-- This is input into your application by your user
            OAuthAccessToken access = service.GetAccessToken(requestToken, verifier);

            // Step 4 - User authenticates using the Access Token
            service.AuthenticateWith(access.Token, access.TokenSecret);
            IEnumerable<TwitterStatus> mentions = service.ListTweetsMentioningMe();

        }

    }
}

в моей форме2

public Form2(string url)
{
    InitializeComponent();
    webBrowser1.Navigate(url);

}

Вот где я потерялся. Как вы видите, Шаг 3 ожидает пин-код .. Как бы я его там установил? У меня была идея написать прямо в app.config, но как я знаю, когда он был создан? Должен ли я сделать третью форму, чтобы пользователь ввел там пин-код?

1 Ответ

2 голосов
/ 16 декабря 2011

так вот что у меня есть (добавьте веб-браузер с именем webBrowser1 в дизайнере)

public partial class TwitterBrowser : Form
{
    public TwitterBrowser()
    {
        InitializeComponent();

        webBrowser1.Navigated += OnNavigate;
    }

    private void OnNavigate(object sender, WebBrowserNavigatedEventArgs e)
    {
        if (e.Url.ToString() != @"https://api.twitter.com/oauth/authorize")
            return;

        if (webBrowser1.Document != null)
        {
            var regex = new Regex("<code>([0-9]*)</code>", RegexOptions.Multiline);
            VerificationCode = regex.Match(webBrowser1.DocumentText).Groups[1].Value;
            Close();
        }
    }

    public string VerificationCode { get; private set; }

    #region Implementation of ITwitterUserInteraction

    public void NavigateTo(Uri uri)
    {
        webBrowser1.Navigate(uri);
    }

    #endregion
}

Тогда используйте это так:

  var browser = new TwitterBrowser();
  browser.NavigateTo(uri);
  browser.ShowDialog();
  result = browser.VerificationCode;
...