Четверг, 23 Июля 2009 г. 14:22
(ссылка )редактировать
+ в цитатник
Все знают, что у твиттера есть 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
Запись понравилась
0
Процитировали
0
Сохранили