- Автор topbloger июля 23, 2009
Все знают, что у твиттера есть API для разработчиков, но мало кто реально им пользуется. Обычно все находят программы уже созданные кем-то на западе. Если же у вас необходимость создать какое-то приложение для твиттера на .Net, то рекомендую достаточно
молодой опен-сорс проект Twitterizer. Ниже много кода, демонстрирующие как просто я добавил возможности твиттера в библиотеку BlogsAPI (закрытый проект пока):
Copy Source | Copy HTML- namespace BlogsAPI.Sites
- {
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Net;
- using System.Text.RegularExpressions;
- using BlogsAPI.Abstract;
- using BlogsAPI.Interfaces;
- using Twitterizer.Framework;
- using TwitterLib = global::Twitterizer.Framework.Twitter;
-
- /// <summary>
- /// </summary>
- [BlogServiceAPI(Description = "http://twitter.com")]
- public class Twitter : BlogServer, Posts, Friends
- {
-
- #region interface: BlogServer
-
- /// <summary>
- /// проверка, является ли передаваемый урл чатью этого сервиса
- /// </summary>
- public override Boolean ValidateLink(String sLink)
- {
- return Regex.IsMatch(sLink, @"^http://((?:\w+\.)?twitter\.com",
- regexoptions);
- }
-
-
- /// <summary>
- /// Получение ссылки на блог блогера
- /// </summary>
- /// <param name="UserName">ник блогера</param>
- public override String getBlogLink(string UserName)
- {
- return String.Format("http://twitter.com/{0}", UserName);
- }
-
- /// <summary>
- /// проверка, является ли передаваемый урл чатью этого сервиса
- /// </summary>
- /// <param name="sLink">ссылка для проверки</param>
- /// <param name="UserName">Имя пользователя на блогохостинге</param>
- public override Boolean ValidateLink(String sLink, out String UserName, out BlogType bType)
- {
- bType = BlogType.Unknown;
- UserName = String.Empty;
- Match m = Regex.Match(sLink, @"^http://(?:[-_\w]+\.)?twitter\.com/(.*?)(?:/|$)",
- regexoptions);
- if (m.Success)
- {
- bType = BlogType.User;
- UserName = m.Groups[1].ToString();
- }
- return m.Success;
- }
-
- /// <summary>
- /// Получение ссылки на блог блогера
- /// </summary>
- /// <param name="UserName">ник блогера</param>
- public override String getBlogLink(string UserName, BlogType btype)
- {
- return getBlogLink(UserName);
- }
-
- /// <summary>
- /// Получение ссылки на RSS блогера - берем старым способом... парся страницу целиком
- /// </summary>
- /// <param name="UserName">ник блогера</param>
- /// <remarks>Неработает если имя пользователя русское, тогда нужен номер</remarks>
- //public override String getRssLink(string UserName) {
-
- #endregion
-
- #region interface: Posts
-
- /// <summary>
- /// список друзей, мы его грузим в качестве проверки, что у пользователя есть права...
- /// </summary>
- TwitterUserCollection FriendList = null;
-
- /// <summary>
- /// Простая попытка залогинится и получить статус
- /// </summary>
- /// <param name="user"></param>
- /// <returns></returns>
- public override bool LogInto(UserAccaunt user)
- {
- try
- {
- FriendList = new TwitterLib(user.username, user.password, "BlogsAPI").User.Friends();
- this.LogedInAs = user;
- return true;
- }
- catch(TwitterizerException e1)
- {
- return false;
- }
-
- }
-
- /// <summary>
- /// Выкладывание записи в блоге
- /// </summary>
- /// <param name="bp">пост для блога</param>
- /// <returns></returns>
- public override PostResult MakePost(UserAccaunt user, BlogPost bp)
- {
- try
- {
- TwitterLib t = new TwitterLib(user.username, user.password, "BlogsAPI");
- //сделали обновление, но нужно сформировать ссылку на пост
- return new PostResult()
- {
- sLink = new Uri(getBlogLink(user.username) + "/status/" + t.Status.Update(bp.Body).ID.ToString())
- };
- }
- catch (TwitterizerException e1)
- {
- return new PostResult() { Error = e1 };
- }
- }
-
- #endregion
-
-
- #region interface: Friends
- /// <summary>
- /// Определяем сколько френдов из списка есть в наших друзьях.
- /// Для сообщества - сколько людей из списка могут писать в сообщество
- /// </summary>
- /// <param name="UserName">имя блога или сообщества</param>
- /// <param name="bt">Блог или Сообщество</param>
- /// <param name="friends">список друзей</param>
- /// <returns>Список тех, что читает блог или является членами сообщества</returns>
- public override List<string> IsFriended(String UserName, BlogType bt, params string[] friends)
- {
- List<string> myfriends = new List<string>(0);
- try
- {
- if (this.LogedInAs == null)
- {
- throw new Exception("Смотреть списки друзей могут только залогиненные пользователи!");
- }
- if (this.FriendList == null)//не подгрузили , так загрузим
- {
- FriendList = new TwitterLib(LogedInAs.username, LogedInAs.password, "BlogsAPI").User.Friends();
- }
- foreach (TwitterUser tu in FriendList)
- {
- foreach (string friend in friends)
- {
- if (String.Compare(friend, tu.ScreenName, true) == 0)
- {
- myfriends.Add(friend);
- }
- }
- }
- }catch(TwitterizerException e1){
- System.Diagnostics.Debug.WriteLine(e1.Message);
- }
- return myfriends;
- }
-
- /// <summary>
- /// Интерфейс по добавлению френдов
- /// </summary>
- /// <param name="who">Имя аккаунта для которого меняем френдов</param>
- /// <param name="friends">Набор имен аккаунтов для френдования</param>
- /// <returns>NULL, если все хорошо, иначе ошибку ввиде Exception</returns>
- public override Exception AddFriends(UserAccaunt who, params string[] friends)
- {
- try
- {
- TwitterLib tw = new TwitterLib(who.username, who.password, "BlogsAPI");
- foreach (string follow in friends)
- {
- tw.User.FollowUser(new TwitterUser() { ScreenName = follow });
- }
- return null;
- }
- catch (TwitterizerException e1)
- {
- return e1;
- }
- }
-
- /// <summary>
- /// Интерфейс по удалению френдов
- /// </summary>
- /// <param name="who">Имя аккаунта для которого меняем френдов</param>
- /// <param name="friends">Набор имен аккаунтов для френдования</param>
- /// <returns>NULL, если все хорошо, иначе ошибку ввиде Exception</returns>
- public override Exception DelFriends(UserAccaunt who, params string[] friends)
- {
- try
- {
- TwitterLib tw = new TwitterLib(who.username, who.password, "BlogsAPI");
- foreach (string follow in friends)
- {
- tw.User.UnFollowUser(new TwitterUser() { ScreenName = follow });
- }
- return null;
- }
- catch (TwitterizerException e1)
- {
- return e1;
- }
- }
-
- /// <summary>
- /// Функция вступления в сообщество.
- /// </summary>
- /// <param name="who">кто вступает</param>
- /// <param name="CommunityName">куда вступает</param>
- /// <returns>Ошибку, если таковая имела место</returns>
- public Exception JoinCommunnity(UserAccaunt who, string CommunityName)
- {
- return new NotSupportedException("Твиттер не имеет сообществ!");
- }
- #endregion
- }
- }
Метки: Blogs, Code, Twitter