Küldés halasztott blog
A közelmúltban a LiveJournal (livejournal.com aka, aka LJ) lehetősége van arra, hogy nem egy késedelmes szállítás rekordokat. Azaz elküldi a bejegyzést bármikor kényelmesen az Ön számára, de a film a felhasználók, akik elolvasták, úgy tűnik, csak bizonyos időpontokban. Korábban ez a képesség hasznot húzhat segítségével harmadik fél által nyújtott szolgáltatások (tulajdonában SUP'u), és most jött a lehetőség a szerver LJ.
Mivel a dokumentáció munka LiveJournalon kiszolgáló nem frissült, úgy tűnik, az idő Brad Fitzpatrick, annak érdekében, hogy megértsük, hogyan kell kihasználni ezt a lehetőséget, a program, meg kellett ásni a forráskódot LiveJournalon motort. jó, hogy nyitva van.
Nem fogok lakni, hogyan forrás sikerült kideríteni elvétől késleltetett küldése a bejegyzésekben, csak így szárad eredményeként, a több funkció használatához elég könnyen.
demonstrációs program
Annak igazolására, a küldő pozíciókat a LJ, írtam egy egyszerű programot ljdelay. felület, amely látható a következő képen:

Ezzel a programmal, akkor küldje üzenetét, kérve őket, konkrét dátumokat. Ha nincs bejelölve az „időzített adás”, a megadott dátum lesz a napját a poszt, de a bejegyzésben, a falon a barátok azonnal megjelennek. Ha ezt a lehetőséget választja, akkor a felvétel megjelenik a filmben a barátok egy adott időpontban, és láthatjuk, hogy a listában a függőben lévő bejegyzéseket.
Vegye figyelembe a forrást a program és ugyanabban az időben nézd meg, hogy mindegy, hogy használja a halasztott küldést.
Megtanul dolgozni szerver
Ha még nem olvasta a korábbi cikkeket a sorozat, főleg a cikk alapjai livejournal.com szerver. röviden felidézni az alapvető pontokat működésével kapcsolatos a szerver.
Ismerje szerver futhat két protokoll - Lapos, ha az adatokat formájában paraméter = érték, és az XML-RPC, mivel azok formájában kibocsátott XML. A fentebb idézett cikket két osztálya mindkét protokoll. Ez a cikk fogja használni FlatLjServer osztály dolgozni Flat protokollt.
Az időzített adás üzenetét, míg a szokásos kérés postevent kell hozzá, vagy néhány paramétert kell megváltoztatni:
- Jegyzőkönyv verziószámát (ver paraméter) nagyobbnak kell lennie, mint 3, ez logikus, hogy használjon 4.
- Paraméter custom_time. egyenlő 1 jelöli, hogy felhasználási késleltetett küldés.
- Tz paramétert (a szavak „időzóna”) meghatározza a felhasználó időzóna (időeltérés UTC). Adott egy sor "0400" (ellensúlyozta 4 óra), vagy a "-0400" (eltolás -4 óra), vagy a "-0130" (-1 óra 30 perc offset), stb
Lássuk, hogy ez hogyan működik a szerver végre a programot. Ahogy már mondtam, hogy dolgozni LiveJournal szerver program használható FlatLjServer osztályban. UML-diagram, amely az alábbiakban látható:

FlatLjServer osztály két nyilvános mód: postEvent normál küldő blogbejegyzések és PostDelayEvent későbbi küldésre. Ezek nagyon hasonlóak és egymástól csak az új, paraméterek küldésére függő bejegyzés.
///
/// küldés postvil blog haladéktalanul
///
/// felhasználónév
/// jelszó
/// header
/// A szöveg a poszt
/// A feladás dátuma
public void PostEvent # 40; húr felhasználó,
húr jelszó
húr egyednél,
húr szöveg,
dateTime dateTime # 41;
# 123;
szótár
GetPostEventParams # 40; felhasználó, jelszó, tárgyként, szöveg, dateTime # 41; ;
húr request = Dict2Request # 40; paramItems # 41; ;
küldenikérés # 40; kérés # 41; ;
# 125;
///
/// Levél blogbejegyzést a késleltetett
///
/// felhasználónév
/// jelszó
/// header
/// A szöveg a poszt
/// Feladásának dátuma koplalás
public void PostDelayEvent # 40; húr felhasználó,
húr jelszó
húr egyednél,
húr szöveg,
dateTime dateTime # 41;
# 123;
szótár
GetPostEventParams # 40; felhasználó, jelszó, tárgyként, szöveg, dateTime # 41; ;
// Módosítsa a lekérdezést, mint küld egy bejegyzést haladéktalanul
// protokoll számát kell> 3
paramItems # 91; "Ver" # 93; = "4";
// megadása, hogy használat utáni késleltetett küldése
paramItems # 91; "Custom_time" # 93; = "1";
// Minden időpont. Ebben a formában 0400 vagy -0400
paramItems # 91; "Tz" # 93; = HttpUtility. urlencode # 40; GetTimeZone # 40; # 41; # 41; ;
húr request = Dict2Request # 40; paramItems # 41; ;
küldenikérés # 40; kérés # 41; ;
# 125;
GetPostEventParams módszer létrehoz egy szótár a paramétereket egy hagyományos (nem késleltetett) Levél üzenet.
privát szótár
húr jelszó
húr egyednél,
húr szöveg,
dateTime dateTime # 41;
# 123;
húr kihívás = GetChallenge # 40; # 41; ;
húr auth_response = GetAuthResponse # 40; jelszó, kihívás # 41; ;
szótár
paramItems # 91; "Mode" # 93; = "Postevent";
paramItems # 91; "Auth_method" # 93; = "Challenge";
paramItems # 91; "Auth_challenge" # 93; = Challenge;
paramItems # 91; "Auth_response" # 93; = Auth_response;
paramItems # 91; „Felhasználó” # 93; = Felhasználói;
paramItems # 91; „Esemény” # 93; = HttpUtility. urlencode # 40; szöveg # 41; ;
paramItems # 91; „Tárgy” # 93; = HttpUtility. urlencode # 40; egyednél # 41; ;
paramItems # 91; "Allowmask" # 93; = 0. toString # 40; # 41; ;
paramItems # 91; "Year" # 93; = DateTime. Évben. toString # 40; # 41; ;
paramItems # 91; "Mon" # 93; = DateTime. Hónapban. toString # 40; # 41; ;
paramItems # 91; „Nap” # 93; = DateTime. Day. toString # 40; # 41; ;
paramItems # 91; „Óra” # 93; = DateTime. Hour. toString # 40; # 41; ;
paramItems # 91; "Min" # 93; = DateTime. Perc. toString # 40; # 41; ;
paramItems # 91; "Ver" # 93; = "1";
visszatérés paramItems;
# 125;
Ezután a módszer Dict2Request szótár átalakítjuk egy sor formájában „param1 = value1param2 = value2.” A módszer küldenikérés kérést küld a kiegészítéssel, a poszt a blog. Küldenikérés módszer nem változott képest ugyanazzal a módszerrel a cikket alapjai livejournal.com szerver. így részleteket nem lakozik rajta, itt a szöveg:
védett húr küldenikérés # 40; húr textRequest # 41;
# 123;
// Display log küld egy kérést
_log. WriteLine nevû # 40; "\ R \ n *** Kérés:" # 41; ;
_log. WriteLine nevû # 40; textRequest # 41; ;
// Átalakítás kérésére string byte []
byte # 91; # 93; ByteArray = Kódolás. UTF8. getBytes # 40; textRequest # 41; ;
// A kérés osztály
HttpWebRequest request = # 40; HttpWebRequest # 41; WebRequest. teremt # 40; ServerUri # 41; ;
// Feltölti a kérés paraméterei
kérelmet. Bizonyítványok = CredentialCache. DefaultCredentials;
kérelmet. Módszer = "POST";
kérelmet. ContentLength = textRequest. hossz;
kérelmet. ContentType = ez. ContentType;
kérelmet. UserAgent = "LJTest";
// Töröljük a gyűjtemény a régi süti, és hozzáadjuk az új
kérelmet. CookieContainer = new CookieContainer # 40; # 41; ;
kérelmet. CookieContainer. hozzáad # 40; _cookies # 41; ;
// Fill paraméterek Proxy (_proxy == null, ha a proxy nem használják)
kérelmet. Proxy = null;
// Levél adatkérés
Patak requestStream = kérelmet. GetRequestStream # 40; # 41; ;
requestStream. ír # 40; ByteArray, 0. textRequest. hossz # 41; ;
// A válasz osztály
HttpWebResponse válasz = # 40; HttpWebResponse # 41; kérelmet. GetResponse # 40; # 41; ;
// olvassa el a választ
Stream-responseStream = választ. GetResponseStream # 40; # 41; ;
StreamReader readStream = new StreamReader # 40; responseStream, kódolás. UTF8 # 41; ;
húr currResponse = readStream. ReadToEnd # 40; # 41; ;
// megjeleníti a log szerver
_log. WriteLine nevû # 40; "\ R \ n *** válasz:" # 41; ;
_log. WriteLine nevû # 40; currResponse # 41; ;
// Display log kapott a cookie válasz
_log. WriteLine nevû # 40; "\ R \ n *** Cookies:" # 41; ;
mert # 40; int i = 0; én
_log. WriteLine nevû # 40; választ. keksz # 91; én # 93;. toString # 40; # 41; # 41; ;
# 125;
readStream. közel # 40; # 41; ;
választ. közel # 40; # 41; ;
visszatérés currResponse;
# 125;
Bejegyzés küldése sikeres volt, és kaptunk egy linket egy új blog bejegyzést.
De úgy néz ki, mint a szerver válaszát esetében halasztott post:
A kérelem is jól ment, kaptunk küldött linkre, hogy a poszt, annak bizonyítékaként, hogy a poszt valóban elment, azt láthatjuk, hogy a halasztott bejegyzések oldalon.

Ez minden segítségével néhány egyszerű kiegészítéseket ilyen, akkor előfordulhat, hogy a program használja a halasztott küldő üzenetét.
A cikk végén ismét emlékeztetni a link, ahol lehet letölteni a forrás ljdelay programot.