Програмно публикувайте коментари в livejournal
Софтуер, източници и снимки
Съдържание
Малко теория
- Упълномощаване на уебсайта на livejournal.
Внедряване в C#
За по-голяма яснота по-нататъшното описание ще бъде придружено от писане на код на C#. Можете да изтеглите изходния код и компилираната програма от тук.

Използвани класове
Първо, разгледайте общата структура на програмата с основните класове.

За да изведем съобщения в дневника, ще използваме класа TextLog, който имплементира интерфейса ILog. Тук няма нищо особено забележително и съдържанието му не е свързано с темата на публикацията, така че няма да се спираме на него.

Или изцяло с проверки за възможни изключения и грешки при въвеждане:
пространство от имена LJBot < публичен частичен клас mainForm : Формуляр < публичен основен формуляр ( ) < InitializeComponent();
_log = нов TextLog (logTextBox); >
private void sendButton_Click ( подател на обект, EventArgs e ) < // Прочетете въведените параметри string url = urlTextBox. текст; низ за вход = loginTextBox. текст; низ парола = passwordTextBox. текст; низово съобщение = commentTextBox. текст; низ subj = subjTextBox. текст;
// Изчистване на дневника от предишни записи _log . изчистване();
// Създаване на клас за работа с LJ сървъра LJServer server = new LJServer ( _log ) ;
> // private void sendButton_Click (изпращач на обект, EventArgs e)
> // публичен частичен клас mainForm : Формуляр
Сега, след като споменахме накратко помощните класове, нека започнем да се занимаваме с класа LJServer, в който ще се извършва цялата работа с LJ сървъра.
/// public void PostComment ( низ влизане, низпарола, низ url, низ съобщение, низ subj, инт родител)
Сега нека да разгледаме как всички стъпки, изброени по-горе, се изпълняват за изпращане на съобщения в метода PostComment().
Подготовка
Тук USERNAME е псевдонимът на потребителя, а NNNNN е цялото число на записа. Трябва да знаем тези данни на този етап.
Всъщност има и друг вид публикации - предавания на livejournal, тогава връзките изглеждат като http://syndicated.livejournal.com/NAME/NNNNN.html, но ние няма да ги разглеждаме в тази статия.
Освен това, ако в псевдонима на потребителя има тирета, тогава те трябва да бъдат заменени с долна черта, в противен случай, когато се опитваме да отворим такава връзка по втория или третия начин, ще получим грешка 404.
/// /// Това общност ли е? /// публичен само за четене bool IsCommunity ;
if ( url . StartsWith ( "http://community.livejournal.com") ) < // Връзка към общност IsCommunity = true ; urlRe = @"http://community.livejournal.com/(? .*)/(? \d+)\.html" ; > друго ако ( url . StartsWith ( "http://users.livejournal.com") url . StartsWith ( "http://user.livejournal.com") ) < // Връзка към потребител в "екзотичен" формат IsCommunity = false ; urlRe = @"http://users?.livejournal.com/(? .*)/(? \d+)\.html" ; > друго < // Връзка към потребител в потребителски формат IsCommunity = false; urlRe = @"http://(? .*).livejournal.com/(? \d+)\.html" ; >
// Намерете името на потребителя (или общността) и номера на запис Match match = Regex. Съвпадение ( url, urlRe, RegexOptions. IgnoreCase );
// Проверете дали всичко е намерено с помощта на регулярния израз if ( ! match . Success ) < throw new FormatException( "InvaluedURL формат" ); >
if ( ! match . Groups [ "name" ] . Success ) < throw new FormatException( "Invalud URL format" ) ; >
if ( ! match . Groups [ "id" ] . Success ) < throw new FormatException( "Invalud URL format" ) ; >
Журнал = мач. Групи ["име"] . стойност; >= int. Разбор (съвпадение. Групи ["id"]. Стойност); > >
Използването на класа UrlInfo в метода PostComment() изглежда така:
// Анализираме препратката към съставните части UrlInfo urlElements ;
опитайте < urlElements = нова UrlInfo ( url ); > catch ( FormatException e ) < _дневник. WriteLine(e.Message); хвърли ; >
_дневник. WriteLine( "Разбор на URL. " ); _дневник. WriteLine (низ. Формат ("Потребителско име:", urlElements. Журнал)); _дневник. WriteLine (string. Format ("Post ID: ", urlElements. Id));
Тази част от кода е изцяло взета от предишната статия, така че няма да давам кода на използваните отново методи GetBaseCookie() и GetPage(), но веднага ще дам частта от кода на метода PostComment(), където се използват изброените методи.
CookieCollection cookies = GetBaseCookie(вход, парола) ;
опитайте < текст = GetPage( url, бисквитки) ; > catch ( WebException e ) < _дневник. WriteLine (e. ToString ()); хвърляне на ново FormatException ("URL грешка", e); >
Получаване на параметъра lj_form_auth
частен низ GetLjFormAuth ( текст на низ ) < _дневник. WriteLine(""); _дневник. WriteLine( "Разбор на формуляр. " );
// Намерете параметъра lj_form_auth вътре във формуляра низ authFormRe = "( \\ \\ )? \" lj_form_auth( \\ \\ )? \" стойност=( \\ \\ )?\" (?.*?)( \\ \\ )? \" " ;
низ lj_form_auth = Regex. Съвпадение (текст, authFormRe, RegexOptions. Многоредови RegexOptions. IgnoreCase). Групи["auth"] . стойност;
_дневник. WriteLine (низ. Формат ("auth:", lj_form_auth));
if ( lj_form_auth . Length == 0 ) < изхвърляне на ново FormatException ( ) ; > връщане на lj_form_auth; >
Този метод просто търси стойността на параметъра lj_form_auth с помощта на регулярен израз. Може да сте объркани от изобилието от незадължителни обратни наклонени черти в регулярен израз. Работата е там, че формата в кода на страницата може да бъде написана в две версии:
Коментари не са изпратени
Благодаря ти.
Ако има желание, мога да дам права за редакция http://blogsapi.codeplex.com/