Denis Gladkikh

outcoldman

My personal blog about software development

  • 03 Dec 2009
  • C#, WPF, Twitter, Linq-To-Twitter, TwitterCloud

Недавно в сети начала гулять ссылка на проект http://tweetcloud.icodeforlove.com/, который мог подсчитать количество используемых слов в ваших сообщениях в twitter и нарисовать некий граф. Но у данного проекта было несколько больших недостатков: русские слова не считались, после подсчета он писал в tweet – спамил про себя. Может быть и еще какие то недостатки: первых двух мне хватило, чтобы не лезть смотреть этот проект. Но, вспомним чудесный продукт LinqToTwitter, о котором я уже как то писал в своем блоге. Ну и понятно, что подсчитать количество слов не составит особого труда.

Потому, берем WPF + LinqToTwitter, пару вечеров и наше облако тегов готово:

Capture

Сразу скажу, что пока писал меня вроде пару раз забанили на TwitterAPI (с ним, вроде, должен работать LinqToTwitter), я добавил Thread.Sleep(200) в промежутки запросов, чтобы хоть как то разгрузить, но проблемы остались – бывают реже, но бывают, так что учтите (не увлекайтесь). После бана около суток не будут работать клиенты. У меня 800 твиттов грузятся и обрабатываются около минуты, время рассчитайте сами – сколько вам потребуется, чтобы подсчитать ваши слова.

Программа

Теперь пару слов о самой программе и интерфейсе. В верхний правый угол вбиваем пользователя и пароль и жмем кнопку Create Cloud, пошел progress bar, который можно в любой момент остановить кнопкой Stop (справа от него). Если нужно вынести какие то слова из статистики вписываем их через запятую или пробел в поле Parasites words. Сначала сам хотел заполнить как можно большим набором таких слов, а потом подумал, что все таки интересно сколько слов паразитов я действительно использую, так что по умолчанию осталось там мало. Статистику по словам я разбил на три группы “Слова”, “Хеш-теги”, “Пользователи”. Так же программа рядом с собой кладет лог файл, в который пишет все твитты, которые она скачала.

После загрузки, да и вообще в любой момент, можете нажать на логотип twitter и сохранить скриншот программы в файл *.png.

Внутренности

Что пришлось и что использовал внутри. Ну само собой LinqToTwitter, который пришлось пересобрать самому и выкинуть зависимости на библиотеки DotNetOpenAuth.dll и Kerr.Credentials.dll, так как с ними у меня на Any CPU сборка не работала, точнее не подгружалась библиотека Kerr.Credentials.dll при запуске (машина x64). Для визуализации использовал WPF – потому что быстро и сердито. Для того чтобы поле PasswordBox можно было биндить – взял решение отсюда (учтите это небезопасное решение, не просто так PasswordBox сделали без возможности устанавливать Binding на поле Password). Задача по сбору статистики работает отдельным потоком, опять таки при помощи моего любимого BackgroundWorker. Ну а сохранение скриншота программы стало возможно благодаря вот этой заметке.

Разбивал на слова я так:

string[] words = tweet.Text.Split(new[] {' ', '.', ',', '?', '!'}, StringSplitOptions.RemoveEmptyEntries);

Потому если этих наборов символов вам не хватит – добавьте свои. ‘)’ и ‘(’ я использоваться не стал, сейчас думаю, что надо было бы еще добавить ‘-‘, наверное. При считывании твиттов, программа их складывает так же в лог рядом с собой по дате. Это на случай – если хочется посмотреть действительно ли это ваш твиттер.

В целом код там достаточно простой. Изначально я даже подумал добавить туда БД (Compact) для истории твиттов, чтобы второй раз уже не скачивать, так же сделать возможность поиска по скаченным твиттам, ну и еще какие то задумки… Но пока оставлю так, если у кого то есть желание что то подправить – код там прост и понятен – правьте. Вносите предложения, может в будущем и еще что то добавлю, если будет спрос. Удачи!

Ссылки

Have a question? Want to follow up? Send a comment? Or just ask for help or consultation? Send me an email at public[at]denis[dot]gladkikh[one more dot]email.