Jak jsem konvertoval všechny blogy na tento blog a Program na upload na Picasu/Blogger

Cesta k tomuto byla cca 2 týdenní, no hrůza. Začalo to tím že jsem chtěl mít nějaké věci na všech blozích, ale jak to udělat, když každý blog je samostatný, má vlastní šablonu a přihlašovací údaje – měnit to na 15 blozích se mi fakt nechtělo. Začal jsem tedy pomalu pracovat na Blogger uploaderu.

Byl den 1., 26.2. . Prvně jsem si vzal šablonu a trochu ji upravil. Teď už neměla chybu :-). Ani ne překvapení bylo když šablona nešla uploadovat v novém rozhraní bloggeru, ale ve starém v pohodě. To bylo 26.2. Nakonec jsem se rozhodl že ten blog bude skutečně na bloggeru. Měl jsem v podstatě jen 3 možnosti: blogger, wordpress, posterous. WP mi nějak nesedl, posterous mě zklamal a to blogger taky ale tak bylo to to nejmenší zlo. Ten den jsem to ještě zkoušel dát na vlastní hosting. Zřídil jsem si freehosting na endore ale nepovedlo se mi nastavit CName záznamy v DNS a navíc bych musel mít v patičce reklamu. Zkoušel jsem i různé jiné freehostingy ale každý měl nějakou vadu. Snažil jsem se tu šablonu převést na WP formát ale skončil jsem na tom že nerozumím PHP.

Další den, 27.2., jsem začal psát samotný program. Prvně ty třídy parseru, u které jsem si plánoval, že ho dám volně na internet. Proto jsem ke všem položkám dal i anglické popisy a názvy proměnných a vlastnosti byly taky anglické. Pak jsem se pokoušel postovat na blogger. Ale ouha, někdy mi to vracelo jen výjimku „Execution resulted in a redirect from http://google.cz a ´jindy zase „method not allowed“.

Co to bylo netuším. Snažil jsem se to řešit různě, stahování gdata v Javě, Pythonu, JavaScriptu. U Pythonu jsem zjistil že to prostě nedám ten jazyk, JS by byl neohrabaný a Java – to je to největší zlo. Instaloval jsem snad 7 IDE, všechny samozřejmě pomalé až to bolí a většinou v Javě. Ale v žádném se mi nepodařilo do projektu vložit ty Java soubory!!

Takže nakonec jsem na Javu rezignoval a zatvrdil se že Javu už never more! Snažil jsem se i dekompilovat gdata .net knihovnu, ale samozřejmě mi to vyhodilo milion chyb. Tak jsem je opravil jak jsem dokázal ale pak jsem narazil na chybu kterou jsem opravit nedokázal – totiž jedna třída se porovnávala se stejnou třídou překrytým operátorem == a ten zase jen volal sebe.

Nakonec jsem zkusil ukázku přímo od Googlu z webu a světe div se, ono to jelo. Poučení: nepoužívat kódy z webu, když jsou přímo officiálně. Nemusí být aktuální atd. Ono to možná bylo tím že jsem mail nezadával jako sunamoCZ@gmail.com ale jako sunamocz@gmail.com . Pak už se ta výjimka „Execution resulted in a redirect from google.cz“ dala pochopit.

Samozřejmě při tom jak jsem slepý, nervózní, blbý a všechno si domýšlím potkávali takové věci, že jsem všechno udělal s „public“ a teprve až když mi ten program nefungoval a já ho debuggoval jsem zjistil že to bylo publish!! Dnes jsem také dokončil parser wrx souborů. Samozřejmě s plno chybama ale jakási alfa verze byla dokončena.

Večer v 8h jsem jsem už měl formulář který mi dovoloval zaškrtnout které posty chci uploadnout: 👻 Screenshot na cl.ly dávno vypršel.. Nicméně nic jiného ten formulář zatím neuměl. Ve 8:20 jsem procitl. Došlo mi že vlastně WLWriterem to nenauploaduji a že se budu muset sám postarat o upload na picasu. Už 26.2. nebo 25.2. jsem zkoumal pluginy pro WLWriter ale zjistil že se takový plugin který bych já potřeboval se udělat nedá – dá se uploadovat maximálně jeden příspěvek, s možností na více serveru. Teď mě napadá že by to mohlo jít ale tehdy jsem usoudil že to fakt nejde.

Další den, 28.2. jsem už začal trochu více programovat. Prvně jsem udělal naprosto šílenou smyčku pro výpočet velikosti thumbnailu, dal jsem jí 4 různé vstupy a v jednom mi to vrátilo špatnou hodnotu. Naštěstí můj dobrý kamoš mi poradil jak se té smyčky zbavit a dokonce to vracelo vždy přesné výsledky!

Konkrétně ta moje metoda se smyčkami vypadala nějak takto: https://pastebin.com/E3xiSb65 . Dnes jsem ještě nevěděl co s jinými typy souborů než s obrázky, například .pdf, .doc, .mp3, atd. Pak jsem nevěděl jak mám ukládat do složky obrázky abych poznal zda ten obrázek na disku je ten co musím nauploadovat. Měl jsem tyto 3 verze:

  1. Ukládat soubory například 1.jpg a mít slovník, kde budu mít jejich skutečné názvy
  2. Přidávat k názvům souborů například „soubor_velikost_45678“ s tím že pokud už souboru bude obsahovat „_velikost_“ tak ji nahradím..
  3. Ukládat do podsložek „45678/soubor“ (trochu více implementace)

Nakonec zvítězila verze 1. Tak jsem dnes zjišťoval jak se zbavit těch „Picasa html entit“ které mi to vracelo to API. Ty divné znaky tam byly pokud byl obrázek na serveru ggpht.com a tak já uploadoval všechny písmenka diakritiky jako obrázky po jednom na picasu a zkoušel. Nakonec mi z toho vyšli 3 různé slovníky a tu jsem skončil – vždycky se to chovalo jinak.
Dále jsem chtěl to udělat přes IE-OP WebBrowser ale do toho se mi moc nechtělo, protože WB potřebuje MTA a ten já nemám rád, bo mi při něm nefunguje další polovina programu. A hlavně nemám rád IE :-). Jinak jsem to zkoušel stáhnout ve všech browserech(Opera, Firefox, Chrome, IE) a všechny šly, jen ty .net třídy ne :-(. Tak jsem to zkusil s Awesomium.net. Prvně tu byl problém že se mi nedařilo zkompilovat ten C++ wrapper nad chromiem.

Nedal jsem si ani den pauzu a přišel další den, 29.2. . Dneska jsem se snažil pomocí .NET tříd stáhnout ty obrázky na disk. Nicméně nešlo to nijak, zkoušel jsem různé hlavičky, atd. ale vždycky jsem se dostal akorát k chybě. Dobré, tak jsem to udělal jako s těmi camminy. Vygeneroval jsem html soubor, otevřel v FF a stáhl. Ale ouha, stáhlo mi to vždycky jen html soubor kde byl až odkaz na stažitelný obrázek.

Nicméně mi to zničilo diakritiku takže se z „i že“ stalo “ e“. Dneska jsem taky naprogramoval na sebe hodně kódu, ale to by se neprojevila moje smůla kdyby mi to něco nepokazilo – zřejmě se mi PC přehřál, vypnul se a po najetí VC# nefungovala AutoRestore 🙁 . Až do teď jsem nepřemýšlel nad tím že bych ten program uveřejnil ať ho mohou využít všichni. Také jsem dnes blbnul s WordPressem – totiž jsem se snažil aby jsem importoval do WP blogy z bloggeru a pak je exportoval, čím získal wrx ale wordpress je strašný smejd – například WP neumí odstranit z příspěvku kategorii – to je do nebe volající. Zkoušel jsem to všemi možnými způsoby, ale prostě to nešlo. Nakonec v noci před půlnocí jsem se rozhodl že program bude kontrolovat na duplicity na webu pomocí souboru který bude mít zapsaný u sebe na disku.

Z noci na 1.3. jsem ponocoval. Za 1h jsem to měl naprogramované, mělo by to fungovat nějak takto: pokud se najdou již uploadované, přeskočí a uloží se..po dokončení akt. smyčky se zobrazí dialog s nalezenými možnými duplikáty..uživatel si vybere co chce i přesto nauploadovat.(hm, teď mě opět napadlo že jsem tam měl udělat aby když se klikne jednou – zaškrtnout, 2x – spustit ten blogpost se kterým koliduje, ale to bych to musel doplnit trochu, protože teď to ukládá pouze zdrojový blog a název příspěvku)..

když něco zaškrtne a dá „Uploadovat“, tak se mu to nauploaduje… O půl sedmé ráno jsem jsem se pokoušel na WP naimportovat aspoň posterous blogy. Ale ani to moc WP nešlo. Tak jsem si stáhl 2 Posterous .NET API. Začal jsem dále dělat na CopyBlogForm. To byl takový formulář kde bude možno libovolně kombinovaně převádět blogy z Bloggeru/Posterous na Blogger/Posterous. Dále jsem se pak snažil uploadovat na posterous skrze api. V té library byla jediná metoda na toto a ta vyžadovala jako parametr PosterousNewPost. Opět se projevilo to že já neumím číst a jak jsem roztěkaný a nesoustředěný, protože jsem „viděl“ nutnost PosterousPost, který nešlo nijak vytvořit – nebyl public, třída si ho vytvářela interně. Přes console API na posterous.com/api mi ty příspěvky šli normálně přidávat, tak jsem si stáhl wireshark a snažil se to okopírovat.

Zkoušel jsem to s WebRequest, HttpWebRequest i WebClient s přesně těmi hlavičkami co posterous odesílal – to ještě šlo. Ale jakmile jsem neodeslal hlavičku cookie, v jejíž hodnotě bylo asi 20 různě generovaných textů, v mém neznámém šifrování, kódování nebo enkódování(zkoušel jsem všechny kódování v .netu a za enkódování base6

4). Protože .net třídy pro práci s xml jsou strašně neohrabané, hledal jsem vlastní třídy které by mi ulehčili práci s nimi. Nenašel jsem nic přesně co jsem hledal, a tak jsem se na to vykašlal a dělal to s pomocí XmlGenerator na úrovni pouhých řetězců. Navíc ještě k té Posterous console API – nechtěla mi říct můj API token. Na jiném účtu ano ale tento byl speciálně vytvořený s jiným heslem jen pro účely testování toho API a zde to jaksi nešlo. Ale to já ještě tehdy nevěděl. A ten účet byl vůbec nějaký divný. Chci poprvé načíst z posterousu 6 krátkých příspěvků(více tam není) přes API a prý 403 Forbidden (Rate Limit Exceeded)..

Bylo po poledni a byl den 6, 2.3.. Já jsem se trápil nad tím že nemůžu pořád přijít na to proč mi nejde uploadovat na posterous. Přičítal jsem to za vinu tomu že to API co mám je v1 ale aktuální je v2 – takže například že ta dll generuje špatný auth token. Možná že v2 podporuje jen OAuth/XAuth. Ale to nemůžu říct, protože jsem se o tom nikde nic nedozvěděl. Pitomý posterous. Fakt jediný zdroj na celém netu byla ta console api. Úplně jako poslední možnost jsem vyzkoušel si zažádat o ten api token.

Tak jsem tak udělal a slíbili že se ozvu brzy. Po celou dobu se mi to nezdálo co to je za blbost protože když to bude token mého účtu tak s ním bude moci kdokoliv pracovat (i když bych ho zašifroval asymetrickým klíčem, tak si ho může kdokoliv odposlednout pomocí hlaviček a spojení celkově, takže pak jedině šifrovat pomocí ssl, ale to nevím zda .net třídy umí.) Nakonec jsem se na to vykváknul a řekl jsem že se bude importovat pouze na Blogger. Taky se ten můj program jmenuje SunamoBloggerBatchUploader.

Dále jsem pak byl v Polsku a v Těšíně nakupovat a vyřizovat s rodiči a já sám lampu. O tom ještě napíšu samostatný článek. Ve 16h jsem stále řešil tu autorizaci. Četl jsem pár věcí na netu o tomto, ale žádné řešení. Jen jsem zjistil že auth_token který posílala api console je jiný než auth_token který posílala ta moje knihovna a také že není v Base64 jak jsem se dočítal všude na netu a hlavně v té .net dll. Pak mě ještě napadlo se podívat do zdrojáku Writerous-u. Ale ta to dělala s tou stejnou knihovnou se kterou já a tedy nefungovala. Po tomhle jsem usoudil že to nefunguje nikomu a vykašlal jsem se na to.

3.3. už můj program uměl se přihlásit na posterous i blogger a uložit si ty data do registru bude li už. chtít. Dále stáhnout blogy na disk – jak soubory wrx/xml tak i všechny obrázky. Pak s těmi wrx umí pracovat – vyhledávat v nich, vytvářet vlastní z existujících .. pak ve formu CopyBlog zobrazuje co se právě děje v programu a má to progress bar.

Ukládá si to nauploadované posty a když to najde nějaký který již byl nauploadován, přeskočí ho a zeptá se na konec co s každým takovým. Uploadovat selektivním způsobem – tedy už si může vybrat jen ty příspěvky co chce uploadovat a nemusí je dělat v tom mém manageru nebo nedejbože ručně. Nedělal jsem jen na tom BloggerUploaderu, ale i na jiných, například jsem do ParsovacCammin přidával i podporu pro parsování cammin stažených z House-Mixes. A pak také Converter řešení a projektu z jiných verzí na verzi 2005. Třeba zrovna u toho byl ten problém že mi to nechtělo zkompilovat linq: 👻 Screenshot na cl.ly dávno vypršel... tak jsem to po mnoha pokusech přepsal do normálního C# :). U prvního převedeného projektu ho to převedlo dobře: 👻 Screenshot na cl.ly dávno vypršel..

Zkoušel jsem převést pár svých projektů, ještě jsem nezkoušel zda to bylo funkčním – vím že mi to jen vyhazovalo varování: Večer jsem dělal na CreateCustomWRXForm. To je form kde uživatel si může vybrat co chce mít v novém wrx a pak jen zadá název a on se vytvoří. Dále jsem zjistil že je třeba nutno přidat s1600/ před název souboru, což jsem nechápal, protože co jsem vnímal, tak včera to ještě nebylo úplně tak nutno. Tak jsem to opravil a začal jsem pomocí API uploadovat příspěvky. Ale ouha, brzo jsem zjistil že na Blogger mohu dát jen 50 příspěvků a pak až za 12h dalších 50. Hlásilo to zase vseříkající chybu „(50

3) Server Unavailable“ nebo „(400) Bad request“. Snažil jsem se tam nastavit prodlevu až 6 minut ale moc velký smysl to nemělo.

4.3. byla zase změna:upload na picasu(doufám že tam není tra. limit jak na blogger),vygenerování xml(taky můj program)->importovat do blogger přes web. Poté jsem řešil že se mi sice importovali na blogger xml ok ale neimportoval se ani jeden příspěvek. Do toho jsem řešil problémy s netem, protože mi některé aplikace táhli jen na 3KB/S a Upload byl cca 10KB/S místo obvyklých 20KB/S. Navíc se mi místo obrázků zobrazovali jen výstražné černé trojúhelníky a navíc ke všemu nerespektovali šířku sloupce, takže to budu muset taky vyřešit, protože to do dnes(8.3.) není: 👻 Screenshot na cl.ly dávno vypršel.. Stejně jako do dnešního dne neumí můj program exportovat v bloggeru(to proto že poprvé mi to vracelo verbose html ale pak už normální xml v čem už se dal snáze vyznat – snad – ještě jsem ho moc nestudoval. Samozřejmě i zde když jsem se pokoušel uploadovat na picasu jsem se nevyhnul výjimkám: „Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.“ Tak jsem si řekl „pokud to ještě jednou udělá, tak tam dám try-catch a do catch Thread.Sleep(1000 * 60 *

2) a za to stejné volání..pokud to opět selže tak už se mi program zastaví s výjimkou“. Taky že udělalo a já to změnil ten kód a od té doby jsem se s touto výjimkou nesetkal :).

5.3. – Dnes jsem se dozvěděl, že zdrojové kódy těch webových utilit pro převádění různých formátů blogu jsou na Google Code. Žel byly v pythonu a ten fakt jaksi nedávám, takže jsem se je pokoušel nějak do C# převést a když to ne, tak aspoň zkompilovat jako .net assembly. Nakonec jsem si řekl že na seznam jazyků, kterým se budu vyhýbat velkým obloukem odedneška přibude k Javě i Python. Nakonec jsem se rozhodl že zkusím zjistit co mám špatně v tom mém wrx exportu, že mi ho ta webová utilita nechtěla brát.

6.3. – Objevil jsem limit picasy, maximálně 1000 fotek na jedno album. Dobré, tak jsem dopsal nějaký kód který by mi po dovršení 1000fotek založil nové album s číslem o 1 vyšší, takže by to vypadalo třeba sunamo, sunamo1, sunamo2 atd. Nicméně zase jsem udělal chybu v tom že jsem sice nové album vytvořil ale už si ho neuložil do programu a ten při každé další fotce tak to album vytvářel znovu! naštěstí tam stihl dát jen 9 fotek než jsem si toho všiml a opravil ten kód. Také mi Blogger API nechtělo vrátit seznam příspěvků, což bylo divné, protože když jsem tu adresu dal do chrome, tak se mi výsledek zobrazil v pohodě. A zatím jsem takto přenesl 3 Blogger blogy,takže že by to .net API nefungovalo zcela se říct nedá. Dále jsem dnes řešil proč mi některé tagy, zvláště

, přesahují šířku sloupce. Zkusil jsem různé nastavení od width, max-width, overflow a jiných až jsem nakonec zkusil opovrhované word-wrap. A to bylo přesně to co jsem potřeboval. Sice mi to zalamovalo slova v polovině ale aspoň že mi to fungovalo :).

7.3. – Dneska jsem to už konečně na ten blog všechno dal. A pak jsem zjistil že .. všechno špatně :'(.

1)všiml jsem si že fotky od určité v 365ce jsou nevysvětlitelně posunuté o 1. Dále pak některé posty měli natvrdo nastavenou černou barvu text a tak jsem z nich nic neviděl. Tak jsem se ptal kamoše které tagy bych měl vyhledat. On na mě že si mám zjistit třídy a id těch blogpostů. NJ, ale to nešlo když mi se to tím exportem a importem všechno ztratilo, bylo li tam něco. Takže jsem to nakonec udělal s tím co napadlo mě – tagy p, div a span. A zdá se že to bylo naprosto dostačující. Dnes jsem taky udělal program pro správu, hledání a nahrazování v mých lozích. Kdo se v té směsi písmenek měl normálně vyznat.. 👻 Tenhle odkaz zemřel dřív než ICQ.. Díky tomu zvýraznění jsem věděl že nenahradím nic co bych neměl.

8.3. – Dnes jsem se naštval a udělal si program na to co jsem dělal celý včerejšek – tedy export do Blogger xml. Dále jsem dnes převedl sdílené třídy a metody v swf do AJ. Ještě mě to čeká se všemi ostatními třídami a metodami v tom řešení. Nejvíc problémů mi způsobilo blogger datum – nejdříve jsem si myslel že se musí doplnit na 2 místa vše. Když to ne tak jsem si všiml že jsem v čase místo : dával -. A pak ještě něco, ale to si nevzpomenu přesně co. Pokaždé jsem si musel procházet různé exporty a porovnávat, aby to bylo úplně stejné.

9.3. – Dělal jsem i na jiných programech. Jinak v tomto jsem pokračoval v té motivaci to dát veřejně na internet a proto jsem udělal úplně nové rozhraní úplně od piky a celé v AJ, které umělo křížově i jednosměrně převádět různé exporty na různé importy, umělo odstraňovat pomocí předprogramovaných parametrů, umělo vyhledávat v názvech i obsazích atd. Už do dokázalo zdárně vyparsovat export se všemi mými blogposty, tedy celkem 1448 🙂 Nicméně jsem i zjistil že jsem neměl mazat z picasy album „Windows Live Writer“. To proto že nějak na polovině blogů z Bloggeru i z Posterousu mi to nechalo odkazy na původní fotky a obrázky a tak jsem takhle musel hodně blogpostů editovat ručně a ty fotky upravit.

10.3. – Závěrečný den po snad 15 dnech různorodé práce. Dnes jsem pouze editoval různé posty, poučil že se nemám nahrazovat globálně & za “ and “ protože to dopadlo tak že jsem měl v prohlížeči pak texty jako „& “ místo „&&“. Skrýval jsem i jiné nežádoucí příspěvky, jako například nedokončené, celkem jsem jich skryl 15. No, čekal jsem že jich bude více. A už toho mám tak akorát plné zuby, teď jdu ten svůj program, resp. jeho anglickou část uveřejnit.

Závěr: vynaložil jsem na to hodně času, ale ještě to bude chtít hodně práce než se to stane použitelné všechno co jsem naprogramoval. Nejvíce mě naštvalo že ty obrázky jsou stále na bloggerech a posterousech a já tak nemůžu ty blogy smazat. Ale co, aspoň tam budu moci dát text a odkaz že se blog přestěhoval. A teď jdu tu na tento blog dopsat další příspěvky..

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *