Програмно публикувайте коментари в livejournal

Софтуер, източници и снимки

Съдържание

Малко теория

  1. Упълномощаване на уебсайта на 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/