Delal jsem na tom pres 2 dny, puvodne jsem se chtel vlezt do 1 dne v pohode, ale prislo tolik problemu a komplikaci, ze jsem rad i za ty 2,25 dny. 1. den jsem odstranil z HTML blogpostu skryte obrazky(skryte obrazky jsem tam daval, aby nebyly videt v blogpostu, ale ve seznamu clanku se takovy skryty obrazek zobrazoval a moje sablona Aurora kdyz nebyl (ne) skryty obrazek k dispozici, zobrazila zastupny obrazek), pokud nebyly ve clanku potreba(to proto aby se mi tyto obrazky nenastahovali, protoze jsem uz od zacatku mel vse naplanovane tak, ze si vyexportuji posty z bloggeru, pak vsechny posty projdu v mem softu BlogConverter, nahradim odkazy na obrazky v <a href=”…”> nebo <img src=”…”> v exportovanem souboru za adresy na domene jepsano.net, tento soubor pak prevedu do WordPress export formatu a ten naimportuji na tento blog jepsano.net).
Kazdopadne, at uz post mel (ne)skryty obrazek nebo ne, ulozil jsem si ho na disk pod nazvem blogpostu. Pak jsem naimportoval z exportniho souboru WP, pridal ke kazdemu postu, kde jsem jeho obrazek na disku, featured image a myslel jsem ze mam hotovo. Ouha, to bylo jen zdani, a zacatek mych trablu.
Pri prochazeni nekterych prispevku jsem zjistil, ze nekde mam prazdne ale presto nekolika radkove tagy <pre> – ted nevim presne co to zpusobovalo, ale muj rozum napada jen jedina vec – proste ze obsah tabu <pre> nebyl HTML zakodovany. Toto postihlo snad vsechny tagy <pre>, nejvice tedy s XML/HTML obsahem, ale pak i treba C#, kde jsem pracoval s generikou. Druhy den jsem to vsechno upravoval rucne, protoze verbose exportni soubor Bloggeru nekde chtel mit html entity jako &lt; a nekde jako <.
Takze kdyz jsem treba < prevedl na &lt; tak se mi rozhodilo vsechno a tak jsem druhy den stravil tim ze jsem treba vypreparoval sablonu, a vsude jinde jsem toto delal rucne. Vecer, v 20h jsem se rozhodl ze takhle to nedodelam nikdy a stahl jsem si znovu cistou sablonu bloggeru. Nasledujici rano jsem pak v rychlosti napsal kod, ktery mi s exportem pracoval jako s obycejnym retezcem, nikoliv jako s HTML pomoci HtmlAgilityPack, protoze v nem jsem nemohl nahrazovat, HAP kod ruzne ku*vil.
Jeste navic porad me zdrzovalo ten 2. den ze jsem musel zkompilovat a spustit program, dale kliknout na tlacitko ze mam exportni soubor bloggeru, vybrat v nabidce Load, pak kliknout na slozku Downloads, vybrat soubor a teprve pak kliknout, aby mi soubor zpracoval. V tech 2 dnech jsem musel resit i mensi problemy a pozadavky, jako napriklad aby se mi do exportniho souboru WP neukladali posty obsahujici v nazvu Windows 8 Apps Control, jez vsech 44 postu ted bude na mem webu. Prvne ale budu muset si udelat poradek na svem SSD, protoze pokud to neudelam, brzo mi nejspis doslouzi. Zde vidite kolik mam obsazeneho mista na SSD s OS a klasickem HDD s daty:
Taky jsem hned na zacatku nedomyslel ze potrebuji i odkazy na vetsi obrazky. Proto jsem to tam pridelaval, aby se mi obrazky pod <a href=”…”> taky stahli a atribut href se nahradil, aby odkazoval na muj hosting pro blog. Abych to ukoncil, nova cesta se ukazala byt nejenom ta nejsnazsi, ale i spravna, a mel jsem velkou radost, kdyz jsem nauploadoval export se starym blogem(1222 prispevku) a vsechno bylo tak jak to melo byt. Pokud byste se chteli podivat jak vypadala cela ta metoda kterou jsem blogy konvertoval, davam Vam ji tady:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 |
public void cmdDownloadAllImages_Executed(object sender, ExecutedRoutedEventArgs e) { OpenBlogExport(BlogService.Blogger, @"C:UsersRadeksunamoDownloadsjepsano-11-27-2014-tak znovu.xml"); int bsSerie = 0; string slozka = Path.Combine(FA.GetFolder(AppFolders.Data), fromBlogService + "Images" + bsSerie.ToString()); while (Directory.Exists(slozka)) { bsSerie++; slozka = Path.Combine(FA.GetFolder(AppFolders.Data), fromBlogService + "Images" + bsSerie.ToString()); } string[] vynechatObsahujiciVTitulku = new string[] { "Windows 8 Apps Controls"}; int obrazekCislo = 0; Directory.CreateDirectory(slozka); WebClient wc = new WebClient(); //int w8AppsControls = 0; string diacriticWithSpaces = ""; Dictionary<string, string> htmlEntityCeskeZnaky = new Dictionary<string, string>(); StringBuilder sb = new StringBuilder(); foreach (var item in SH.diacritic) { sb.Append(item.ToString() + " "); } diacriticWithSpaces = sb.ToString(); string entityHtmlWithSpaces = HttpUtility.HtmlEncode(diacriticWithSpaces); string[] chars = SH.Split(diacriticWithSpaces, " "); string[] entities = SH.Split(entityHtmlWithSpaces, " "); if (chars.Length != entities.Length) { throw new Exception("Nestejny pocet argumentu."); } for (int i = 0; i < chars.Length; i++) { htmlEntityCeskeZnaky.Add(entities[i], chars[i]); } List<string> vsechnyDomenyAnchor = new List<string>(); List<string> vsechnyDomenyImg = new List<string>(); List<string> vsechnyPriponyAnchors = new List<string>(); List<string> vsechnyPriponyImg = new List<string>(); //-U vsech techto domen budu stahovat pouze jedna lis se o obrazek(tedy bude obsahovat .JPG/.jpg/.Jpg atd. + PNG, GIF, JPEG, BMP List<string> domenyKtereNahraditAnchor = new List<string>(new string[] { "3.bp.blogspot.com", "4.bp.blogspot.com", "1.bp.blogspot.com", "2.bp.blogspot.com", "cl.ly", "lh5.ggpht.com", "lh3.ggpht.com", "lh4.ggpht.com", "lh6.ggpht.com", "lh5.googleusercontent.com", "lh3.googleusercontent.com", "lh4.googleusercontent.com", "lh6.googleusercontent.com", "www.talkandroid.com", "picasaweb.google.com", //"sunamoblog.blogspot.com", //"dl.dropbox.com", "translate.googleusercontent.com" }); List<string> domenyKtereNahraditImg = new List<string>(domenyKtereNahraditAnchor); Dictionary<string, string> prikladUriPriponyAnchor = new Dictionary<string, string>(); Dictionary<string, string> prikladUriPriponyImg = new Dictionary<string, string>(); //int poradiObrazku = 0; //bool zadnaNewLine = true; //StringBuilder sb = new StringBuilder(); var bpms = bv.GetAllPostsButExcludeInTitle(vynechatObsahujiciVTitulku); var pocet = bv.Posts.Count; foreach (BloggerPostModel item in bpms) { //if (item.Title.Contains()) //{ // if (item.Serie < 130 || item.Serie > 173) // { // int ds = 0; // int dsf = ds; // } // Debug.Print(item.Serie.ToString()); // w8AppsControls++; //} //if (item.Title.Contains("Testovani CSS rozvrzeni pr")) //{ //} //var r1 = HttpUtility.HtmlDecode(item.content.nonVerbose); //var r2 = HttpUtility.HtmlDecode(r1); //string cPuvodni = HttpUtility.HtmlDecode(r2); string cPuvodni = item.content.nonVerbose; //string cPuvodniDecoded = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(cPuvodni))); List<int> projite = new List<int>(); string zacatekPre = "<pre class="brush:"; int startovat = 0; while (startovat != -1) { int dexStart = cPuvodni.IndexOf(zacatekPre, startovat); if(dexStart == -1) { startovat = -1; break; } else { startovat = dexStart + zacatekPre.Length; } int dexEnd = cPuvodni.IndexOf("</pre", startovat); string sub = cPuvodni.Substring(startovat + 1, dexEnd); string rep = sub.Replace("<br />", "").Replace("<br/>", "").Replace("<br>", ""); rep = HttpUtility.HtmlDecode(rep); rep = HttpUtility.HtmlDecode(rep); cPuvodni = cPuvodni.Replace(sub, rep); } HtmlParser hp = new HtmlParser(); hp.LoadHtml("<div>" + cPuvodni + "</div>"); System.Collections.Generic.List<HtmlNode> imgs = hp.ReturnAllTags(hp.DocumentNode, "img"); cPuvodni = cPuvodni.Replace("<!--more-->", ""); Dictionary<string, string> jizNahrazeneHodnotyAtributu = new Dictionary<string, string>(); foreach (var item2 in imgs) { var src = HtmlHelper.GetValueOfAttribute("src", item2); //-U obou dvou blogu na Bloggeru mi to vypsalo True //if (src.Contains(Environment.NewLine)) //{ // zadnaNewLine = false; //} if (src.Trim() != "") { //bool pridatDoSlovniku = false; src = src.Replace("<br />", ""); if(!jizNahrazeneHodnotyAtributu.ContainsKey(src)) { //pridatDoSlovniku = true; } else { //-Toto by zde nemelo nikdy nastat continue; } Uri uri = null; try { uri = new Uri(src); } catch (Exception) { Debug.Print("Z adresy " + src + " se nepodarilo vytvorit objekt Uri"); continue; } //.Replace("www.", "") var domenaLower = uri.Host.ToLower(); if(!vsechnyDomenyImg.Contains(domenaLower)) { vsechnyDomenyImg.Add(domenaLower); } bool domenaKteraNahradit = domenyKtereNahraditImg.Contains(domenaLower); //domenaKteraNahradit = domenyKtereNahraditImg.Contains(domenaLower); //domenaKteraNahradit = true; if (domenaKteraNahradit) { var dexPosledniTecky = src.LastIndexOf('.'); var ext = ""; //Path.GetExtension(href); if (dexPosledniTecky != -1) { int dexIndexOtaznik = src.LastIndexOf('?'); if (dexIndexOtaznik != -1 && dexIndexOtaznik > dexPosledniTecky) { ext = SH.Substring(src, dexPosledniTecky - 1, dexIndexOtaznik -1); } else { ext = src.Substring(dexPosledniTecky); } } if (ext != "") { if(!vsechnyPriponyImg.Contains(ext)) { prikladUriPriponyImg.Add(ext, src); vsechnyPriponyImg.Add(ext); } if (domenyKtereNahraditImg.Contains(domenaLower) && SH.ContainsAny(src, ".JPG", ".Jpg", ".jpg", ".PNG", ".Png", ".png", ".JPEG", ".Jpeg", ".jpeg", ".GIF", ".Gif", ".gif", ".BMP", ".Bmp", ".bmp")) { string fileNameWithExt = bsSerie.ToString() + "_" + obrazekCislo.ToString() + ext; var http = "http://jepsano.net/i/" + fileNameWithExt; string cPuvodni2 = string.Copy(cPuvodni); cPuvodni = cPuvodni.Replace(src, http); jizNahrazeneHodnotyAtributu.Add(src, http); if (cPuvodni2 != cPuvodni) { //sb.AppendLine(src); try { wc.DownloadFile(src, Path.Combine(slozka, fileNameWithExt)); } catch (Exception ex) { Debug.Print(ex.Message); } obrazekCislo++; } } } else { Debug.Print("Obrazek " + src + " nemel priponu"); } } } // } //-Nahradim anchor v odkazech(a'nchors) imgs = hp.ReturnAllTags(hp.DocumentNode, "a"); foreach (var item2 in imgs) { var href = HtmlHelper.GetValueOfAttribute("href", item2); //-U obou dvou blogu na Bloggeru mi to vypsalo True //if (src.Contains(Environment.NewLine)) //{ // zadnaNewLine = false; //} if (href.Trim() != "") { bool pridatDoSlovniku = false; href = href.Replace("<br />", ""); if (!jizNahrazeneHodnotyAtributu.ContainsKey(href)) { //pridatDoSlovniku = true; } else { continue; } Uri uri = null; try { uri = new Uri(href); } catch (Exception) { Debug.Print("Z adresy " + href + " se nepodarilo vytvorit objekt Uri"); continue; } //.Replace("www.", "") var domenaLower = uri.Host.ToLower(); if(!vsechnyDomenyAnchor.Contains(domenaLower)) { vsechnyDomenyAnchor.Add(domenaLower); } bool nahradit = domenyKtereNahraditAnchor.Contains(domenaLower); //nahradit = true; if (nahradit) { var dexPosledniTecky = href.LastIndexOf('.'); var ext = ""; //Path.GetExtension(href); if (dexPosledniTecky != -1) { int dexIndexOtaznik = href.LastIndexOf('?'); if (dexIndexOtaznik != -1 && dexIndexOtaznik > dexPosledniTecky) { ext = SH.Substring(href, dexPosledniTecky - 1, dexIndexOtaznik-1); } else { ext = href.Substring(dexPosledniTecky); } } if (ext != "") { if (!vsechnyPriponyAnchors.Contains(ext)) { prikladUriPriponyAnchor.Add(ext, href); vsechnyPriponyAnchors.Add(ext); } if (domenyKtereNahraditAnchor.Contains(domenaLower) || SH.ContainsAny(href, ".JPG", ".Jpg", ".jpg", ".PNG", ".Png", ".png", ".JPEG", ".Jpeg", ".jpeg", ".GIF", ".Gif", ".gif", ".BMP", ".Bmp", ".bmp")) { string fileNameWithExt = bsSerie.ToString() + "_" + obrazekCislo.ToString() + ext; var http = "http://jepsano.net/i/" + fileNameWithExt; string cPuvodni2 = string.Copy(cPuvodni); cPuvodni = cPuvodni.Replace(href, http); if (cPuvodni2 != cPuvodni) { //sb.AppendLine(src); try { wc.DownloadFile(href, Path.Combine(slozka, fileNameWithExt)); } catch (Exception ex) { Debug.Print(ex.Message); } obrazekCislo++; } } } else { Debug.Print("Odkaz " + href + " nemel priponu"); } } } // } foreach (var item4 in htmlEntityCeskeZnaky) { if (cPuvodni.Contains(item4.Key)) { cPuvodni = cPuvodni.Replace(item4.Key, item4.Value); } if (item.Title.Contains(item4.Key)) { item.Title = item.Title.Replace(item4.Key, item4.Value); } } //-Odeberu pocatecni a koncovy div //-.Substring(5, cPuvodni.Length - 11) item.content.nonVerbose = cPuvodni; } Debug.Print("VSECHNY DOMENY IMG"); foreach (var item in vsechnyDomenyImg) { Debug.Print(""" + item + "","); } Debug.Print(Environment.NewLine); Debug.Print(Environment.NewLine); Debug.Print("VSECHNY DOMENY ANCHOR"); foreach (var item in vsechnyDomenyAnchor) { Debug.Print(""" + item + "","); } Debug.Print(Environment.NewLine); Debug.Print(Environment.NewLine); Debug.Print("VSECHNY PRIPONY IMG"); foreach (var item in vsechnyPriponyImg) { Debug.Print(""" + item + "","); Debug.Print("Uri: " + prikladUriPriponyImg[item]); } Debug.Print(Environment.NewLine); Debug.Print(Environment.NewLine); Debug.Print("VSECHNY PRIPONY ANCHOR"); foreach (var item in vsechnyPriponyAnchors) { Debug.Print(""" + item + "","); Debug.Print("Uri: " + prikladUriPriponyAnchor[item]); } Debug.Print(Environment.NewLine); Debug.Print(Environment.NewLine); cmdSaveAllPostsAsBlogServiceExportFile_Executed2(vynechatObsahujiciVTitulku); NewStatus("Vsechny obrazky byly stazeny a s nimi byl vytvoren soubor exportu."); //NewStatus(zadnaNewLine.ToString()); } |
Ted jdu predelat ty posty Windows 8 Apps Controls na svuj web sunamo.net a pak oba 2 blogy na bloggeru smazu :).
EDIT den pote (29.11.2014):
Protoze jsem zjistil ze se mi nezobrazuji korektne ukazky kodu, musel jsem to cele znovu menit, mazat a uploadovat. Ale zatim tech nekolik stranek s ruznymi jazyky snippetu jedou, takze by to snad melo jet vsechno :).
Taky jsou zaplnene vsechny obrazky, od 0 do 1101 u stareho blogu a podobne i u noveho. Predtim kdyz aplikace narazila na obrazek s chybou 404, nestahla jej ale pocitadlo obrazku bylo inkrementovano.