امکان ارسال پیام در توییتر توسط API از نسخه 1.0 قطع شده است و برنامه نویسان وب دچار مشکل شده اند. لذا به
این منظور می توان از متد OAuth توییتر استفاده نمود. در ادامه مراحل
استفاده از این متد توسط کد C# مرحله به مرحله شرح داده
خواهد شد:
گام اول:
قبل از هر چیز برای ارسال پیام در توییتر، حساب کاربری
مخصوص خود را ایجاد نمایید.
گام دوم:
سپس از لینک https://apps.twitter.com اقدام به ایجاد Twitter
Application برای دریافت
دسترسی به Token مربوطه نمایید. مطابق تصویر زیر برای
این منظور باید اطلاعات مورد نیاز را تکمیل نمود:
1.
Name: نام دلخواه برای Application که
حداکثر 32 کاراکتر می باشد.
2.
Description: توضیح اضافه در مورد Application که حداقل 10 و
حداکثر 200 کاراکتر می باشد.
3.
Website: نام وب سایت معتبر و ثبت شده ای که کاربران می توانند نرم
افزار شما را از آن دانلود کرده و یا اطلاعاتی در مورد آن به دست آورند.
4.
Call Back URL: آدرس برگشت که
پس از تایید اعتبار توسط OAuth به آن بازگردانده می شوید. برای محدود کردن Application از بازگشت، این
فیلد می تواند خالی باشد.
پس از تکمیل موارد فوق بر روی دکمه ایجاد application کلیک نمایید.
گام سوم:
پس از ایجاد Application اطلاعات مربوط به آن را مشاهده خواهید نمود و با توجه به درخواست خود
می توانید Token و سطوح دسترسی مورد نیاز خود را ایجاد
نمایید:
1.
قبل از هر چیز باید Token مربوطه را
ایجاد نمایید. به این منظور برای نرم افزار شما token منحصر به فردی
ایجاد خواهد شد.
2.
سپس سطح دسترسی دلخواه برای ارسال پیام در نرم افزار را
انتخاب نمایید. در صورتی که خواندن و نوشتن و دسترسی به پیام مستقیم توسط نرم
افزار مورد نیاز است، گزینه آخر را انتخاب نمایید.
3.
در نهایت می توانید کد های Token و سطوح دسترسی
و رمز آن ها مشاهده نمایید. برای استفاده از توییتر نرم افزار خود باید از این کد
ها در نرم افزار خود استفاده نمایید.
گام چهارم:
در این مرحله می توان کد های ایجاد شده را در نرم افزار
استفاده نمود.
برای مثال متد PostMessageToTwitter پیام دلخواه را در Twitter ارسال می
نماید:
public static void PostMessageToTwitter(string message)
{
//The facebook json url to update the status
string twitterURL = "https://api.twitter.com/1.1/statuses/update.json";
//set the access tokens (REQUIRED)
string oauth_consumer_key = "****";
string oauth_consumer_secret = "****";
string oauth_token = "****";
string oauth_token_secret = "****";
// set the oauth version and signature method
string oauth_version = "1.0";
string oauth_signature_method = "HMAC-SHA1";
// create unique request details
string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
System.TimeSpan timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc));
string oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
// create oauth signature
string baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
"&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&status={6}";
string baseString = string.Format(
baseFormat,
oauth_consumer_key,
oauth_nonce,
oauth_signature_method,
oauth_timestamp, oauth_token,
oauth_version,
Uri.EscapeDataString(message)
);
string oauth_signature = null;
using (
HMACSHA1 hasher =
new HMACSHA1(
ASCIIEncoding.ASCII.GetBytes(Uri.EscapeDataString(oauth_consumer_secret) + "&" +
Uri.EscapeDataString(oauth_token_secret))))
{
oauth_signature =
Convert.ToBase64String(
hasher.ComputeHash(
ASCIIEncoding.ASCII.GetBytes("POST&" + Uri.EscapeDataString(twitterURL) + "&" +
Uri.EscapeDataString(baseString))));
}
// create the request header
string authorizationFormat = "OAuth oauth_consumer_key=\"{0}\", oauth_nonce=\"{1}\", " +
"oauth_signature=\"{2}\", oauth_signature_method=\"{3}\", " +
"oauth_timestamp=\"{4}\", oauth_token=\"{5}\", " + "oauth_version=\"{6}\"";
string authorizationHeader = string.Format(
authorizationFormat,
Uri.EscapeDataString(oauth_consumer_key),
Uri.EscapeDataString(oauth_nonce),
Uri.EscapeDataString(oauth_signature),
Uri.EscapeDataString(oauth_signature_method),
Uri.EscapeDataString(oauth_timestamp),
Uri.EscapeDataString(oauth_token),
Uri.EscapeDataString(oauth_version)
);
HttpWebRequest objHttpWebRequest = (HttpWebRequest) WebRequest.Create(twitterURL);
objHttpWebRequest.Headers.Add("Authorization", authorizationHeader);
objHttpWebRequest.Method = "POST";
objHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
using (Stream objStream = objHttpWebRequest.GetRequestStream())
{
byte[] content = ASCIIEncoding.ASCII.GetBytes("status=" + Uri.EscapeDataString(message));
objStream.Write(content, 0, content.Length);
}
var responseResult = "";
try
{
//success posting
WebResponse objWebResponse = objHttpWebRequest.GetResponse();
StreamReader objStreamReader = new StreamReader(objWebResponse.GetResponseStream());
responseResult = objStreamReader.ReadToEnd().ToString();
}
catch (Exception ex)
{
//throw exception error
responseResult = "Twitter Post Error: " + ex.Message.ToString() + ", authHeader: " + authorizationHeader;
}
}