 |
3.日記のダウンロード(1ページ目) 先ほどダウンロードした日記リストから日記のURLのみを抽出します。 (grepなど正規表現によるまとめ作業が出来ないときついですよ)
日記リストは日付ごとに取得されていますが、 その日に日記を書いていた場合は、取得したファイル内に
→続きを見る
という文章が入ります。 なので、DLしたすべてのファイルからその文章がある行だけを抽出します。
E:\diary\54239\d54239_20070517.html(961,169) [SJIS]: <td colspan="2" align="RIGHT" class="j12_150"><a href="/SakaTsukuOnline/diary.do"../spacer.gif" height="8" width="1">
|
 |
 |
|
|
 |
 |
 |

 |
4.コメントが多いページの取得 日記のコメントは20件までしか同時に表示されません。 上でダウンロードしたファイルは1ページ目しかないので、 20件以上コメントをもらってる場合はそのぶんが抜けてしまいます。 (我こそはコメント少ないゼっ! って人は不要)
20件以上コメントがあると、
25件中 1-20件目 [1 2] 次へ
といった、項目がつきます。 この部分を抽出するし、再びダウンロードソフトにかけます
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/diary.do?page=1&diaryId=63316 Folder=E:\diary\54239\diary SaveAs=d063316_2.html ID=0
|

|
 |
 |
|
|
 |
 |
 |

 |
5.画像の取得(本文) 日記に画像を貼り付けると、そのURLは
http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board/15539.jpg
という風になります。 数字の部分が日記IDです。
なので、日記から、 /user_board/ がある部分のみを抽出してダウンロードします。
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board/15539.jpg Folder=E:\diary\54239\diary SaveAs=e015539.jpg ID=0
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board/34806.jpg Folder=E:\diary\54239\diary SaveAs=e034806.jpg ID=0
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board/73888.jpg Folder=E:\diary\54239\diary SaveAs=e073888.jpg ID=0
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board/74487.jpg Folder=E:\diary\54239\diary SaveAs=e074487.jpg ID=0
|

|
 |
 |
|
|
 |
 |
 |

 |
6.画像の取得(コメント) コメントに画像を貼り付けると、そのURLは
http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board_comment/60583.jpg
という風になります。 数字の部分が日記IDです。
なので、日記から、 /user_board_comment/ がある部分のみを抽出してダウンロードします。
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board_comment/60583.jpg Folder=E:\diary\54239\diary SaveAs=f060583.jpg ID=0
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board_comment/65798.jpg Folder=E:\diary\54239\diary SaveAs=f065798.jpg ID=0
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board_comment/65799.jpg Folder=E:\diary\54239\diary SaveAs=f065799.jpg ID=0
Url=http://www.sakatsuku-online.com/SakaTsukuOnline/image/user_board_comment/105501.jpg Folder=E:\diary\54239\diary SaveAs=f105501.jpg ID=0
|

|
 |
 |
|
|
 |
 |
 |

 |
7.日記の整形&トップページ作成 以上で必要なファイルのダウンロードは終了です。 しかしこのままだとURLが変わっているので、 そのままではまともに表示することは出来ません。 なので日記を加工します。
ここは色々面倒なので、プログラムの出番です。
やることは、 a)日記部分のみの抽出(いらないヘッダーなどを削除) b)参照するURLから要らない部分を削除(セッションIDなど) c)画像のURLを変更(例 /SakaTsukuOnline/images/icon9.gif → ../icon9.gif) d)日付とタイトルの取得(トップページ用)
参考にウチの作ったプログラムのソースを貼っときます。 突貫工事で何も考えてないですが、とりあえず動作はします。
|

|
 |
 |
|
|
 |
 |
 |

 |
8.終了 これで大体の作業は終了です。 一覧も年月毎に分けようかなとも思ったのですが、 面倒だったのでやめました。
まーあと数日ですが、やりたい人はがんばってください。
|

|
 |
 |
|
|
 |
 |
 |

 |
void transformDiary(CString inFolder,CString outFolder) { CString Name,Str; CString tTitle,tDate; CStdioFile hListFile((LPCTSTR)(inFolder + CString("list.txt")),CFile::modeRead); CStdioFile hDateFile((LPCTSTR)(outFolder + CString("index.html")),(CFile::modeCreate)|(CFile::modeWrite)); CStdioFile *pSrcFile,*pDstFile; long i,j,k,n,m,o; bool IsTag; char Buf1[300000],Buf2[100000],Buf3[100000],Buf4[100000]; char txBuf[300]; BYTE Xp=0x0a,Xq=0x09;
hDateFile.WriteString("<HTML><HEAD>"); hDateFile.WriteString("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"../base.css\" TITLE=\"StyleSheet\">"); hDateFile.WriteString("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"../navi_player.css\" TITLE=\"StyleSheet\">"); hDateFile.WriteString("</HEAD><BODY>");
|

|
 |
 |
|
|
 |
 |
 |

 |
while(hListFile.ReadString(Name)){ cout << (LPCTSTR)Name << endl; pSrcFile=new CStdioFile((LPCTSTR)(inFolder+Name),CFile::modeRead); if(pSrcFile){ pDstFile=new CStdioFile((LPCTSTR)(outFolder+Name),(CFile::modeCreate)|(CFile::modeWrite)); if(pDstFile){ pDstFile->WriteString("<HTML><HEAD>"); pDstFile->WriteString("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"../base.css\" TITLE=\"StyleSheet\">"); pDstFile->WriteString("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"../navi_player.css\" TITLE=\"StyleSheet\">"); pDstFile->WriteString("</HEAD><BODY>");
n=pSrcFile->Read(Buf1,300000);
|

|
 |
 |
|
|
 |
 |
 |

 |
m=0; IsTag=false; for(i=0;i<n;i++){ if( (*((DWORD *)(Buf1+i+ 0))==0x61743c0a) && (*((DWORD *)(Buf1+i+ 4))==0x20656c62) && (*((DWORD *)(Buf1+i+ 8))==0x74646977) && (*((DWORD *)(Buf1+i+12))==0x35223d68) && (*((DWORD *)(Buf1+i+16))==0x20223235)){ IsTag=true; } if( (*((DWORD *)(Buf1+i+ 0))==0x726f663c) && (*((DWORD *)(Buf1+i+ 4))==0x616e206d) && (*((DWORD *)(Buf1+i+ 8))==0x223d656d) && (*((DWORD *)(Buf1+i+12))==0x74736f70)){ IsTag=false; } if(IsTag){ Buf2[m]=Buf1[i]; m++; } } o=0; IsTag=true; for(i=0;i<m;i++){ if( (*((DWORD *)(Buf2+i+ 0))==0x65736a3b) && (*((DWORD *)(Buf2+i+ 4))==0x6f697373) && (*((DWORD *)(Buf2+i+ 8))==0x3d64696e)){ IsTag=false; } if(Buf2[i]=='\"'){ IsTag=true; } if(IsTag){ Buf3[o]=Buf2[i]; o++; } }
|

|
 |
 |
|
|
 |
 |
 |

 |
k=0; IsTag=true; for(i=0;i<o;i++){ if( (*((DWORD *)(Buf3+i+ 0))==0x61532F22) && (*((DWORD *)(Buf3+i+ 4))==0x7354616B) && (*((DWORD *)(Buf3+i+ 8))==0x4F756B75) && (*((DWORD *)(Buf3+i+12))==0x6E696C6E) && (*((DWORD *)(Buf3+i+16))==0x6D692F65) && (*((DWORD *)(Buf3+i+20))==0x73656761)){ Buf4[k+0]='\"'; Buf4[k+1]='.'; Buf4[k+2]='.'; i+=24; k+=3; }
|

|
 |
 |
|
|
 |
 |
 |

 |
if( (*((DWORD *)(Buf3+i+ 0))==0x61532F22) && (*((DWORD *)(Buf3+i+ 4))==0x7354616B) && (*((DWORD *)(Buf3+i+ 8))==0x4F756B75) && (*((DWORD *)(Buf3+i+12))==0x6E696C6E) && (*((DWORD *)(Buf3+i+16))==0x6D692F65) && (*((DWORD *)(Buf3+i+20))==0x2f656761)){
if( Buf3[i+34] == '/'){ Buf4[k+0]='\"'; Buf4[k+1]='e'; i+=34; k+=2; }else{ Buf4[k+0]='\"'; Buf4[k+1]='f'; i+=42; k+=2; } if( Buf3[i+6] == '/'){ Buf4[k]='0'; k++; } IsTag=false;
} if( (*((DWORD *)(Buf3+i+ 0))==0x7474612F) && (*((DWORD *)(Buf3+i+ 4))==0x6D686361) && (*((DWORD *)(Buf3+i+ 8))==0x49746E65) && (*((DWORD *)(Buf3+i+12))==0x6567616D)){ i+=15; IsTag=false; } if(IsTag){ Buf4[k]=Buf3[i]; k++; } IsTag=true; }
|

|
 |
 |
|
|
 |
 |
 |

 |
n=0; for(i=0;i<k;i++){ if(Buf4[i] =='>'){ n++; if(n == 10){ ZeroMemory(txBuf,300); for(j=0;j<100;j++){ if(Buf4[i+j+1] =='<')break; txBuf[j]=Buf4[i+j+1]; } tDate=CString(txBuf); } if(n == 18){ ZeroMemory(txBuf,300); for(j=0;j<100;j++){ if(Buf4[i+j+1] =='<')break; txBuf[j]=Buf4[i+j+1]; } tTitle=CString(txBuf); } } } pDstFile->Write(Buf4,k);
pDstFile->WriteString("</BODY>"); }
|

|
 |
 |
|
|
 |
 |
 |

 |
pDstFile->Close(); pDstFile=NULL;
hDateFile.WriteString(CString("<a href=\"")); hDateFile.WriteString(Name); hDateFile.WriteString(CString("\">")); hDateFile.WriteString(tDate); hDateFile.WriteString(CString(" → ")); hDateFile.WriteString(tTitle); hDateFile.WriteString(CString("</a><br>\n"));
} pSrcFile->Close(); pSrcFile=NULL; } hDateFile.WriteString("</BODY></HTML>");
hListFile.Close(); hDateFile.Close(); }
|

|
 |
 |
|
|
 |
 |
 |

 |
今気づいたけど newで取ったインスタンスdeleteし忘れてるorz
|

|
 |
 |
|
|
 |
 |
 |

 |
すいません
日本語で最初からお願いできますか?w
|

|
 |
 |
|
|
 |
 |
 |

 |
>Pさん
あんたのはもう残ってるからいいでしょ!w
「梱包済み」ってリンク押したら、 zipに圧縮したのがあるよ
|

|
 |
 |
|
|
 |
 |
 |

 |
本当に・・ありがとでした
何だかお世話だけなってしまって
こう何も返せないのが心残りです。。。
|

|
 |