Twitter API

Все знают, что у твиттера есть API для разработчиков, но мало кто реально им пользуется. Обычно все находят программы уже созданные кем-то на западе. Если же у вас необходимость создать какое-то приложение для твиттера на .Net, то рекомендую достаточно молодой опен-сорс проект Twitterizer. Ниже много кода, демонстрирующие как просто я добавил возможности твиттера в библиотеку BlogsAPI (закрытый проект пока):

Copy Source | Copy HTML
  1. namespace BlogsAPI.Sites
  2. {
  3.     using System;
  4.     using System.Collections.Generic;
  5.     using System.Text;
  6.     using System.Net;
  7.     using System.Text.RegularExpressions;
  8.     using BlogsAPI.Abstract;
  9.     using BlogsAPI.Interfaces;
  10.     using Twitterizer.Framework;
  11.     using TwitterLib = global::Twitterizer.Framework.Twitter;
  12.  
  13.     /// <summary>
  14.     /// </summary>
  15.     [BlogServiceAPI(Description = "http://twitter.com")]
  16.     public class Twitter : BlogServer, Posts, Friends
  17.     {
  18.  
  19.         #region interface: BlogServer
  20.  
  21.         /// <summary>
  22.         /// проверка, является ли передаваемый урл чатью этого сервиса
  23.         /// </summary>
  24.         public override Boolean ValidateLink(String sLink)
  25.         {
  26.             return Regex.IsMatch(sLink, @"^http://((?:\w+\.)?twitter\.com",
  27.                 regexoptions);
  28.         }
  29.  
  30.  
  31.         /// <summary>
  32.         /// Получение ссылки на блог блогера
  33.         /// </summary>
  34.         /// <param name="UserName">ник блогера</param>
  35.         public override String getBlogLink(string UserName)
  36.         {
  37.             return String.Format("http://twitter.com/{0}", UserName);
  38.         }
  39.  
  40.         /// <summary>
  41.         /// проверка, является ли передаваемый урл чатью этого сервиса
  42.         /// </summary>
  43.         /// <param name="sLink">ссылка для проверки</param>
  44.         /// <param name="UserName">Имя пользователя на блогохостинге</param>
  45.         public override Boolean ValidateLink(String sLink, out String UserName, out BlogType bType)
  46.         {
  47.             bType = BlogType.Unknown;
  48.             UserName = String.Empty;
  49.             Match m = Regex.Match(sLink, @"^http://(?:[-_\w]+\.)?twitter\.com/(.*?)(?:/|$)",
  50.                 regexoptions);
  51.             if (m.Success)
  52.             {
  53.                     bType = BlogType.User;
  54.                     UserName = m.Groups[1].ToString();
  55.             }
  56.             return m.Success;
  57.         }
  58.  
  59.         /// <summary>
  60.         /// Получение ссылки на блог блогера
  61.         /// </summary>
  62.         /// <param name="UserName">ник блогера</param>
  63.         public override String getBlogLink(string UserName, BlogType btype)
  64.         {
  65.             return getBlogLink(UserName);
  66.         }
  67.  
  68.         /// <summary>
  69.         /// Получение ссылки на RSS блогера - берем старым способом... парся страницу целиком
  70.         /// </summary>
  71.         /// <param name="UserName">ник блогера</param>
  72.         /// <remarks>Неработает если имя пользователя русское, тогда нужен номер</remarks>
  73.         //public override String getRssLink(string UserName) {
  74.  
  75.         #endregion
  76.  
  77.         #region interface: Posts
  78.  
  79.         /// <summary>
  80.         /// список друзей, мы его грузим в качестве проверки, что у пользователя есть права...
  81.         /// </summary>
  82.         TwitterUserCollection FriendList = null;
  83.  
  84.         /// <summary>
  85.         /// Простая попытка залогинится и получить статус
  86.         /// </summary>
  87.         /// <param name="user"></param>
  88.         /// <returns></returns>
  89.         public override bool LogInto(UserAccaunt user)
  90.         {
  91.             try
  92.             {
  93.                 FriendList = new TwitterLib(user.username, user.password, "BlogsAPI").User.Friends();
  94.                 this.LogedInAs = user;
  95.                 return true;
  96.             }
  97.             catch(TwitterizerException e1)
  98.             {
  99.                 return false;
  100.             }
  101.  
  102.         }
  103.  
  104.         /// <summary>
  105.         /// Выкладывание записи в блоге
  106.         /// </summary>
  107.         /// <param name="bp">пост для блога</param>
  108.         /// <returns></returns>
  109.         public override PostResult MakePost(UserAccaunt user, BlogPost bp)
  110.         {
  111.             try
  112.             {
  113.                 TwitterLib t = new TwitterLib(user.username, user.password, "BlogsAPI");
  114.                 //сделали обновление, но нужно сформировать ссылку на пост
  115.                 return new PostResult()
  116.                 {
  117.                     sLink = new Uri(getBlogLink(user.username) + "/status/" + t.Status.Update(bp.Body).ID.ToString())
  118.                 };
  119.             }
  120.             catch (TwitterizerException e1)
  121.             {
  122.                 return new PostResult() { Error = e1 };
  123.             }
  124.         }
  125.  
  126.         #endregion
  127.  
  128.  
  129.         #region interface: Friends
  130.         /// <summary>
  131.         /// Определяем сколько френдов из списка есть в наших друзьях.
  132.         /// Для сообщества - сколько людей из списка могут писать в сообщество
  133.         /// </summary>
  134.         /// <param name="UserName">имя блога или сообщества</param>
  135.         /// <param name="bt">Блог или Сообщество</param>
  136.         /// <param name="friends">список друзей</param>
  137.         /// <returns>Список тех, что читает блог или является членами сообщества</returns>
  138.         public override List<string> IsFriended(String UserName, BlogType bt, params string[] friends)
  139.         {
  140.             List<string> myfriends = new List<string>(0);
  141.             try
  142.             {
  143.                 if (this.LogedInAs == null)
  144.                 {
  145.                     throw new Exception("Смотреть списки друзей могут только залогиненные пользователи!");
  146.                 }
  147.                 if (this.FriendList == null)//не подгрузили , так загрузим
  148.                 {
  149.                     FriendList = new TwitterLib(LogedInAs.username, LogedInAs.password, "BlogsAPI").User.Friends();
  150.                 }
  151.                 foreach (TwitterUser tu in FriendList)
  152.                 {
  153.                     foreach (string friend in friends)
  154.                     {
  155.                         if (String.Compare(friend, tu.ScreenName, true) == 0)
  156.                         {
  157.                             myfriends.Add(friend);
  158.                         }
  159.                     }
  160.                 }
  161.             }catch(TwitterizerException e1){
  162.                 System.Diagnostics.Debug.WriteLine(e1.Message);
  163.             }
  164.             return myfriends;
  165.         }
  166.  
  167.         /// <summary>
  168.         /// Интерфейс по добавлению френдов
  169.         /// </summary>
  170.         /// <param name="who">Имя аккаунта для которого меняем френдов</param>
  171.         /// <param name="friends">Набор имен аккаунтов для френдования</param>
  172.         /// <returns>NULL, если все хорошо, иначе ошибку ввиде Exception</returns>
  173.         public override Exception AddFriends(UserAccaunt who, params string[] friends)
  174.         {
  175.             try
  176.             {
  177.                 TwitterLib tw = new TwitterLib(who.username, who.password, "BlogsAPI");
  178.                 foreach (string follow in friends)
  179.                 {
  180.                     tw.User.FollowUser(new TwitterUser() { ScreenName = follow });
  181.                 }
  182.                 return null;
  183.             }
  184.             catch (TwitterizerException e1)
  185.             {
  186.                 return e1;
  187.             }
  188.         }
  189.  
  190.         /// <summary>
  191.         /// Интерфейс по удалению френдов
  192.         /// </summary>
  193.         /// <param name="who">Имя аккаунта для которого меняем френдов</param>
  194.         /// <param name="friends">Набор имен аккаунтов для френдования</param>
  195.         /// <returns>NULL, если все хорошо, иначе ошибку ввиде Exception</returns>
  196.         public override Exception DelFriends(UserAccaunt who, params string[] friends)
  197.         {
  198.             try
  199.             {
  200.                 TwitterLib tw = new TwitterLib(who.username, who.password, "BlogsAPI");
  201.                 foreach (string follow in friends)
  202.                 {
  203.                     tw.User.UnFollowUser(new TwitterUser() { ScreenName = follow });
  204.                 }
  205.                 return null;
  206.             }
  207.             catch (TwitterizerException e1)
  208.             {
  209.                 return e1;
  210.             }
  211.         }
  212.  
  213.         /// <summary>
  214.         /// Функция вступления в сообщество.
  215.         /// </summary>
  216.         /// <param name="who">кто вступает</param>
  217.         /// <param name="CommunityName">куда вступает</param>
  218.         /// <returns>Ошибку, если таковая имела место</returns>
  219.         public Exception JoinCommunnity(UserAccaunt who, string CommunityName)
  220.         {
  221.             return new NotSupportedException("Твиттер не имеет сообществ!");
  222.         }
  223.         #endregion
  224.     }
  225. }

Метки: , ,   


blog comments powered by Disqus

Добавить комментарий

Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Не отображать

Topbot at FeedsBurner
 

копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008