Python/2.7 for fun.

네이버 블로그에서 최근에 올라온 음악들 다운받기 1 블로그 구조 분석

qkqhxla1 2015. 3. 15. 15:47

동기.

종종 네이버 블로그에서 코딩하면서 들을 음악을 다운받는다. 개인적으로 리듬게임의 음악이 신나서 

시간가는줄 모르고 잘 듣고 집중도 잘되는것같다.  


http://blog.naver.com/diamonds8/220296189977 이 분의 블로그의 카테고리에 리듬게임음악 등을

정리해서 자주 포스팅이 되는데, 매번 들어가서 받을게 있는지 확인하고 만약 내가 안 받은 음악이면 

하나하나 다운받기 귀찮아서..(특히 일본어로 된 음악은 있는지 찾기도 힘들다.) 가져오는 스크립트를 하나 짰다. 그런데 다운받기 전에 네이버 블로그의 구조분석을 약간 해야됬다.


계획.

1. 해당 음악 카테고리의 최근 글들의 음악 목록을 분석한다.

2. 음악 목록중 내가 이미 가지고 있는 음악이면 무시하고, 새 음악이면 다시 다운 받는다.

3. 다운받다가 깨질 경우를 대비하여 음악이 있어도 덮어쓰기가 가능하도록 한다.


분석한 부분.

처음에 다운로드 받을 주소를 찾기 위해 페이지에서 찾아야 할 부분은 카테고리의 '글 목록'이 나오는 부분이다. 이 부분은 소스 중에서 찾아보면

http://blog.rss.naver.com/diamonds8.xml에 있다. 해당 부분은 xml 파일이며 한번에 보이는 카테고리당 글 갯수는 서로 다르다. 내가 다운받을 음악 카테고리는...


<category>

<![CDATA[ Be-music script ]]>

</category>

태그로 되있고, 그 아래아래에 있는 <link>http://blog.naver.com/diamonds8/220299404654</link>

로 둘러쌓인 링크를 가져와야 한다.(매번 링크가 바뀌느라 실시간으로 가져와야 함.) 그리고 이 링크를 가져와서 해당 링크로 들어가보자. 들어가보면 각각 글이 하나씩 나오는걸 확인할수 있다.



현재 상태이며 들어가보면 맨 위의 @on_OTL님의 Silence [침묵] 이라는 글부터 3번째장의 처음까지 총 11개의 글이 xml파일에 있음을 알 수 있다.(시간이 지남에 따라 다르게 보일 수 있음.) 다른 카테고리의 글 갯수는 3개, 16개 등으로 다른데 대충 추측해보자면 xml파일 내부에 쓰여진 링크의 갯수는 일정하고, 블로그 주인장이 새로 포스팅하는 글 순서대로 xml에 저장되고, 오래된 순서부터 삭제되는 것 같다. 어쨋든 새 음악을 가져오려면 글 갯수가 몇개있던 무시하고 Be-music script 카테고리 아래의 링크를 가져오면 된다.


<category>

<![CDATA[ Be-music script ]]>

</category>

<title>

<![CDATA[ 음악 이름 ]]>

</title>

<link>우리가 가져올 부분</link>


위의 형식을 찾아서 우리가 가져올 부분만 가져오면 된다. 이게 기본적으로 필요한 목록이다.


각각의 목록에서 파일을 다운받으려면... 예로 아무런 링크나 들어가서 소스를 봐보자. 페이지의 진짜 소스는 또 다른곳에 저장되어 있다. 맨 아래에 


<frame id="mainFrame" name="mainFrame" src="/PostView.nhn?blogId=diamonds8&logNo=220299404654&redirect=Dlog&widgetTypeCall=true" scrolling="auto" onload="oFramesetTitleController.start(self.frames['mainFrame'], self, sTitle);oFramesetTitleController.onLoadFrame();oFramesetUrlController.start(self.frames['mainFrame']);oFramesetUrlController.onLoadFrame()">


부분의 src에 소스가 하나 더 있는데 이리로 들어가보자.(다른 사람들은 다를 수도 있다.)


그러면 동일한 페이지가 다시 뜨는데 주소만 바뀌어져있다.

ex) 같은 글 다른 url

http://blog.naver.com/diamonds8/220299404654


http://blog.naver.com/PostView.nhn?blogId=diamonds8&logNo=220299404654&redirect=Dlog&widgetTypeCall=true

아래부분의 url이 해당 페이지의 진짜 url이며, 이 내부에 내가 다운로드받을 파일 이름과 파일 저장 경로가 명시되어있다. 진짜 url의 소스를 다시한번 보면 973번째즘의 줄에 


gdidTag[1] = "90000003_00000000000000334ADE256E";

aPostAutoSourcingHtmlView[1] = "<p style='margin:11px 0 7px 0;padding:0;font-size:12px;font-family:Dotum;font-style:normal;font-weight: normal;'><strong style='padding:0 7px 0 0;'>[출처]</strong> <a href='http://blog.naver.com/diamonds8/220299404654' target='_blank'>[KBP 특집]@on_OTL님의 Silence [침묵] </a><span style='padding:0 7px 0 5px;'>|</span><strong style='padding:0 7px 0 0;'>작성자</strong> <a href='http://blog.naver.com/diamonds8' target='_blank'>Pegasus</a></p>";

aPostFiles[1] = [{'encodedAttachFileName': 'Silence [침묵] .wma','encodedAttachFileNameByTruncate': 'Silence [침묵] .wma','encodedAttachFileUrl': 'http://blogattach.naver.net/3da8219283d1d9052bcda89ba2443d4fe2b24dac04/20150313_246_blogfile/diamonds8_1426248257997_aAmKa4_wma/Silence+%5B%C4%A7%B9%AC%5D+.wma','licenseyn': '','maliciousCodeYn': 'false','punishType': '0','attachFileSize': '5,441,542','encodedAttachFileNameByUTF8': 'Silence+%5B%EC%B9%A8%EB%AC%B5%5D+.wma','ahfLicenseYn' : 'false'}];

aPostImageFileSizeInfo[1] = {'/20150313_176/diamonds8_1426246071892LJy6F_JPEG/Title.jpg': '71,285|Title.jpg'};

aPostSendInfo[1] = [];

aPostBaseInfo[1] = "220299404654|0|1|1|11|0|false";

aQueuePost.push({logNo : '220299404654',tagNames : ''});


막 이런 소스가 있는데. 여기서 진하게 표시한 두 부분. encodeAttachFileName이 파일 이름이고,

encodedAttachFileUrl 부분이 파일을 다운로드받는 경로이다.(파일을 다운로드 받는 경로로 들어가보면 파일을 다운로드받는 창이 뜬다.) 앞으로 이 부분을 찾아서 다운로드받으면 된다.


결론적으로 목적은 최근에 업데이트된 음악(대략 5~20개 사이)목록을 가져와서, 내 음악파일의 이름들과 비교해서 없으면 다운로드받는 스크립트가 목적이다.



다음글 : http://qkqhxla1.tistory.com/312