outcoldman
outcoldman Denis Gladkikh

Интегрируемся с Twitter

.NET, C#, Linq2Twitter, Twitter, and Windows Service

Давайте сначала обозначим, что такое Twitter.

Twitter – это бесплатный интернет-сервис, представляющий собой систему микроблогов, позволяющий пользователям отправлять короткие текстовые заметки (до 140 символов), используя веб-интерфейс, SMS, службы мгновенных сообщений или сторонние программы-клиенты (http://ru.wikipedia.org).

Второй вопрос, а зачем он нужен вообще? Просто общаться с друзьями? Это как вариант, но все таки существуют более удобные сервисы для обмена сообщениями. Скорее всего для публикацией и слежением за новостями (как личные, так и публичные).

Итак, если у вас есть некий интернет магазин, или сайт компании, на котором вы публикуете новости, то можно создать и twitter аккаунт, для того, чтобы дублировать туда информацию о выходе новых публикаций на сайте (как новости, так и поступление новой продукции), или вы можете прикрутить к своему блогу возможность публиковать в твиттере информацию о поступлении новых топиков (есть готовые сервисы, как http://twittsync.com/, работает на Microsoft Azure). Так же можно использовать твиттер “не по назначению” – вы можете создать некий пустой аккаунт, который будет публиковать, к примеру, состояние вашего компьютера, через Direct Message на ваш аккаунт или просто к себе на главную – один из примеров: ваш провайдер требует деньги за белый IP адрес, в противном случае он назначает вам адрес динамически, и каждые 24 часа вас отрубает (это для тех, кто использует роутеры) и вы хотите в любое время (например, с работы) узнавать какой у вас IP адрес для того чтобы зайти на свой домашний компьютер удаленно.

Следующий вопрос, сложно ли это сделать?

Легко! Можно пойти немного по более сложному пути и изучать TwitterAPI самому, тогда вам ни от чего не нужно будет зависеть, для начала тогда нужно воспользоваться статьей – Michael C. Kennedy – Building a Twitter Application in .NET, путь попроще – использовать готовое решение LINQ to Twitter (я им и воспользуюсь).

Итак, давайте начнем с простейшего примера. Создадим консольное приложение со следующим кодом:

using System; 
using System.Linq; 
using LinqToTwitter; 
 
namespace TwitterIntegration 
{ 
    internal class Program 
    { 
        private static void Main() 
        { 
            // Класс, отвечающий за авторизацию 
            UsernamePasswordAuthorization auth = new UsernamePasswordAuthorization 
                                                     { 
                                                         UserName = "UserName", 
                                                         Password = "Password" 
                                                     }; 
 
            // Основной провайдер для работы с twitter 
            TwitterContext twitterCtx = new TwitterContext(auth); 
            // Осуществляем авторизацию 
            auth.SignOn(); 
 
            // Берем twit'ы, оставленные нашими друзьями (за кем мы следуем) 
            var publicTweets = 
                from tweet in twitterCtx.Status 
                where tweet.Type == StatusType.Friends 
                select tweet; 
 
            // Печатаем результат на экран 
            publicTweets.ToList().ForEach( 
                tweet => Console.WriteLine( 
                             "User Name: {0}, Tweet: {1}", tweet.User.Name, tweet.Text)); 
 
 
            auth.SignOff(); 
 
            Console.WriteLine("Press any key to end this demo."); 
            Console.ReadKey(); 
        } 
    } 
}

Неправда ли все получается очень просто (не забудьте заменить в вашем случае пользователя и пароль). Причем TwitterContext может так же легко работать и с http://jtweeter.com и http://identi.ca (такими же сайтами для микроблогов).

Но давайте вернемся к нашему сценарию. Мы задумали публиковать наш IP адрес. Первый вопрос – как узнать IP адрес нашего компьютера, для этого можно обратиться к статье Get the IP address in a Windows application на geekpedia – воспользуемся последним способом (который использует сервис http://www.geekpedia.com/ip.php), так как этот способ учитывает так же то, что ваш компьютер может быть направлен через роутер (как у меня):

private static string GetIpAddress() 
{ 
    WebClient myWebClient = new WebClient(); 
    Stream myStream = myWebClient.OpenRead("http://www.geekpedia.com/ip.php"); 
    StreamReader myStreamReader = new StreamReader(myStream); 
    return myStreamReader.ReadToEnd(); 
}

В данному методе используются классы из именованных пространств System.IO и System.Net (не забудьте подключить using’и). Создаем новый проект – Windows Service, добавим в него сразу информацию об установке (How to: Add Installers to Your Service Application). Воспользуемся классом Timer (из System.Timers), который будет каждые 60 минут вызывать метод, который и будет публиковать IP адрес:

private static void TwittIpAddress(object sender, ElapsedEventArgs e) 
{ 
    UsernamePasswordAuthorization auth = new UsernamePasswordAuthorization 
                                             { 
                                                 UserName = "UserName", 
                                                 Password = "Password" 
                                             }; 
 
    // Основной провайдер для работы с twitter 
    TwitterContext twitterCtx = new TwitterContext(auth); 
    // Осуществляем авторизацию 
    auth.SignOn(); 
 
    string message = string.Format("My IP Address is: {0}", GetIpAddress()); 
 
    //Пишем новый tweet 
    twitterCtx.UpdateStatus(message); 
 
    //Отправляем сообщение на аккаунт 
    twitterCtx.NewDirectMessage("ToUserName", message); 
 
    auth.SignOff(); 
}

В данном методе мы сначала обновляем статус аккаунта UserName, а так же отправляем сообщение пользователю ToUserName. Чтобы установить Windows Service воспользуйтесь утилитой InstallUtil.

Как видите интегрировать свое приложение или веб-сайт с модным Twitter’ом очень просто. Более того, таким способом можно повышать свои шансы во всяческих конкурсах, вроде розыгрыша приглашений в офис Google (а похожих розыгрышей бывает много). Пример приложения можно скачать ниже.

Скачать пример: TwitterIntegration.zip

Have feedback or questions? Looking for consultation?

My expertise: MongoDB, ElasticSearch, Splunk, and other databases. Docker, Kubernetes. Logging, Metrics. Performance, memory leaks.

Send me an email to public@denis.gladkikh.email.

The content on this site represents my own personal opinions and thoughts at the time of posting.

Content licensed under the Creative Commons CC BY 4.0.