Trimiterea postărilor amânate la

Recent, în LiveJournal (este, de asemenea, livejournal.com, de asemenea LJ), este posibil să amânați postarea. Adică, postați în orice moment convenabil pentru dvs., dar în fluxul de utilizatori care vă citesc, va apărea doar la un moment dat. Anterior, această oportunitate ar putea fi utilizată cu ajutorul unor servicii terțe (aparținând SUP'u), iar acum o astfel de oportunitate a apărut în serverul însuși LJ.







Dat fiind că documentația pentru lucrul cu serverul LJ nu a fost actualizată, se pare că, din zilele lui Brad Fitzpatrick, atunci pentru a înțelege cum să profitați de această ocazie din programul dvs., a trebuit să săpăm codul sursă al motorului LJ. bine, sunt deschise.

Nu voi sta pe cum a fost posibil să aflu principiul trimiterii posturilor amânate din codul sursă, voi da doar un rezultat uscat, mai ales că este destul de ușor să folosești această posibilitate.

Program de demonstrație

Pentru a demonstra munca de a trimite posturi în LJ am scris un simplu program ljdelay. a cărui interfață este prezentată în următoarea imagine:

Trimiterea postărilor amânate la

Cu acest program puteți trimite mesaje prin întrebări specifice. Dacă nu este selectată caseta de validare "Folosiți întârzierea expedierii", data introdusă va fi setată ca dată postare, dar intrarea în fluxul prietenilor dvs. va apărea imediat. Dacă această casetă de selectare este selectată, intrarea va apărea în fluxul prietenilor dvs. la ora specificată și o puteți vedea în lista de înregistrări în așteptare.

Luați în considerare codul sursă al acestui program și, în același timp, vom afla cum să utilizați în continuare trimiterea amânată.

Lucrul cu serverul

Dacă nu ați citit articolele anterioare din serie, în special articolul Essentials de lucru cu serverul livejournal.com. amintesc pe scurt principalele puncte asociate cu funcționarea serverului.

Serverul LJ poate lucra pe două protocoale - Plat, atunci când datele sunt transferate sub formă de parametru = valoare și XML-RPC, atunci când sunt formatate ca XML. În articolul de mai sus, au fost citate două clase pentru a lucra pe ambele protocoale. Acest articol va utiliza clasa FlatLjServer pentru a lucra la protocolul Flat.

Pentru a utiliza trimiterea amânată a postărilor, în comparație cu solicitarea obișnuită a spamului, trebuie să adăugați sau să modificați doar câțiva parametri:

  • Numărul versiunii protocolului (parametrul ver) trebuie să fie mai mare de 3, adică este logic să utilizați 4.
  • Parametrul custom_time. egal cu 1, indică faptul că se utilizează trimiterea întârziată.
  • Parametrul tz (din cuvintele "fusul orar"), care specifică fusul orar al utilizatorului (diferența de timp în comparație cu UTC). Setați ca un șir în formatul "+0400" (decalat cu +4 ore) sau "-0400" (Offset pentru -4 ore) sau "-0130" (decalat cu -1 oră 30 minute) etc.

Să vedem cum funcționează acest lucru cu serverul în cadrul programului. Așa cum am menționat deja, programul folosește clasa FlatLjServer pentru a lucra cu serverul. Diagrama UML este prezentată mai jos:

Trimiterea postărilor amânate la

Clasa FlatLjServer are două metode publice: PostEvent pentru postarea obișnuită a unui post blog și PostDelayEvent pentru o trimitere întârziată. Ele sunt foarte asemănătoare și diferă numai prin adăugarea de noi parametri pentru trimiterea posturilor amânate.

///


/// Trimiteți fără întârziere un post pe blog
///

/// Nume utilizator
/// parolă
/// antet
/// Afișați textul
/// Data postării
public void PostEvent # 40; utilizator de șir,
cod de parola,
șir subj,
text șir,
DataTime dateTime # 41;
# 123;
dicționar paramItems =






GetPostEventParams # 40; utilizator, parola, subj, text, dateTime # 41; ;

string request = Dict2Request # 40; paramItems # 41; ;
SendRequest # 40; cerere # 41; ;
# 125;


///


/// Trimiteți un mesaj pe blog utilizând trimiterea amânată
///

/// Nume utilizator
/// parolă
/// antet
/// Afișați textul
/// Data trimiterii postului
public void PostDelayEvent # 40; utilizator de șir,
cod de parola,
șir subj,
text șir,
DataTime dateTime # 41;
# 123;
dicționar paramItems =
GetPostEventParams # 40; utilizator, parola, subj, text, dateTime # 41; ;

// Modificări ale cererii în comparație cu trimiterea postului fără întârziere
// Numărul de protocol trebuie să fie> 3
paramItems # 91; "Ver" # 93; = "4";

// Specificați că folosim trimiterea amânată a postului
paramItems # 91; "Custom_time" # 93; = "1";

// Fusul orar. Specifică în formatul +0400 sau -0400
paramItems # 91; "Tz" # 93; = HttpUtility. urlencode # 40; GetTimeZone # 40; # 41; # 41; ;

string request = Dict2Request # 40; paramItems # 41; ;
SendRequest # 40; cerere # 41; ;
# 125;

Metoda GetPostEventParams creează un dicționar cu parametrii pentru postarea normală (nu amânată).

dictionar privat GetPostEventParams # 40; utilizator de șir,
cod de parola,
șir subj,
text șir,
DataTime dateTime # 41;
# 123;
string provocare = GetChallenge # 40; # 41; ;
string auth_response = GetAuthResponse # 40; parolă, provocare # 41; ;

dicționar paramItems = noul dicționar # 40; # 41; ;
paramItems # 91; „Modul“ # 93; = "postevent";
paramItems # 91; "Auth_method" # 93; = "provocare";
paramItems # 91; "Auth_challenge" # 93; = provocare;
paramItems # 91; "Auth_response" # 93; = auth_response;
paramItems # 91; „Utilizator“ # 93; = utilizator;
paramItems # 91; „Eveniment“ # 93; = HttpUtility. urlencode # 40; text # 41; ;
paramItems # 91; „Subiect“ # 93; = HttpUtility. urlencode # 40; subiectul respectiv # 41; ;
paramItems # 91; "Allowmask" # 93; = 0. ToString # 40; # 41; ;
paramItems # 91; „Anul“ # 93; = dateTime. An. ToString # 40; # 41; ;
paramItems # 91; "Mon" # 93; = dateTime. Luna. ToString # 40; # 41; ;
paramItems # 91; „Ziua“ # 93; = dateTime. Ziua. ToString # 40; # 41; ;
paramItems # 91; „Ora“ # 93; = dateTime. Oră. ToString # 40; # 41; ;
paramItems # 91; "Min" # 93; = dateTime. Minut. ToString # 40; # 41; ;
paramItems # 91; "Ver" # 93; = "1";
returnați paraminte;
# 125;

Apoi, folosind metoda Dict2Request, dicționarul este convertit într-un șir de formular "param1 = value1param2 = value2". Și metoda SendRequest trimite o solicitare de adăugare a unei postări în blog. Metoda SendRequest nu sa schimbat în comparație cu aceeași metodă din articolul Bazele de lucru cu serverul livejournal.com. așa că nu vom elabora în detaliu, aici este textul său:

șirul protejat SendRequest # 40; string textRequest # 41;
# 123;
// Imprimați cererea în jurnal
_log. WriteLine # 40; "\ r \ n *** Cerere:" # 41; ;
_log. WriteLine # 40; textRequest # 41; ;

// Convertiți o interogare de la un șir la un octet []
octet # 91; # 93; byteArray = Codificare. UTF8. getBytes # 40; textRequest # 41; ;

// Obțineți clasa de interogări
Solicitarea HttpWebRequest = # 40; HttpWebRequest # 41; WebRequest. crea # 40; ServerUri # 41; ;

// Completați parametrii de interogare
cerere. Credentials = CredentialCache. DefaultCredentials;
cerere. Metoda = "POST";
cerere. ContentLength = textRequest. Lungime;
cerere. ContentType = aceasta. ContentType;
cerere. UserAgent = "LJTest";

// Goliți colecția de pe vechiul modul cookie și adăugați altele noi
cerere. CookieContainer = CookieContainer nou # 40; # 41; ;
cerere. CookieContainer. adăuga # 40; _cookies # 41; ;

// Completați parametrii proxy (_proxy == null dacă proxy-ul nu este folosit)
cerere. Proxy = null;

// Trimiterea datelor de solicitare
Stream requestStream = cerere. GetRequestStream # 40; # 41; ;
requestStream. scrie # 40; byteArray, 0. textRequest. lungime # 41; ;

// Obțineți clasa de răspuns
Răspunsul HttpWebResponse = # 40; HttpWebResponse # 41; cerere. GetResponse # 40; # 41; ;

// Citiți răspunsul
Răspunsul fluxuluiStream = răspuns. GetResponseStream # 40; # 41; ;
StreamReader readStream = nou StreamReader # 40; răspunsStream, codificare. UTF8 # 41; ;

șir currResponse = readStream. ReadToEnd # 40; # 41; ;

// Ieșire în jurnalul de răspuns al serverului
_log. WriteLine # 40; "\ r \ n *** Răspuns:" # 41; ;
_log. WriteLine # 40; currResponse # 41; ;

// Ieșirea în jurnal a cookie-urilor primite în răspuns
_log. WriteLine # 40; "\ r \ n *** Cookie-uri:" # 41; ;
pentru # 40; int i = 0; eu # 123;
_log. WriteLine # 40; răspuns. fursecuri # 91; eu # 93;. ToString # 40; # 41; # 41; ;
# 125;

readStream. închide # 40; # 41; ;
răspuns. închide # 40; # 41; ;

return currResponse;
# 125;

Trimiterea mesajului a avut succes și am primit un link către o nouă intrare de blog.

Iată cum arată răspunsul serverului în cazul postării amânate:

De asemenea, cererea a mers bine, am primit un link către postul postat, ca dovadă că postul a mers într-adevăr, îl putem vedea pe pagina de înregistrări în așteptare.

Trimiterea postărilor amânate la

Cu toate acestea, cu ajutorul unui astfel de add-on simplu, puteți face ca programul dvs. să utilizeze expedierea mesajelor amânate.

La sfârșitul articolului voi reaminti din nou link-ul de unde puteți descărca codul sursă al ljdelay.







Trimiteți-le prietenilor: