Last active
October 31, 2017 20:09
-
-
Save chamie/8e86b61666226e5df9a2 to your computer and use it in GitHub Desktop.
Сохранение альбомов с VK.com (В Контакте) целиком. Открываете страницу альбома и вставляете его в консоль JavaScript. Работает со всеми страницами с URL вида https://vk.com/photos1 (все фотографии пользователя с id = 1) или https://vk.com/album1_136592355 (альбом номер 136592355 пользователя с id = 1). Если альбом «фотографии со стены» скрыт, то…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var offset = parseInt(document.getElementsByClassName("summary")[0].innerText.match("[0-9]+")[0]);//первое (и единственное) число в описании - количество фотографий. | |
var path = document.location.pathname.split("?")[0];//обрабатываемые пути: vk.com/album... vk.com/photos... | |
var album = (path.search("photos")==-1)? ("album"+ path.split("/album")[1]) : ("photos"+ path.split("/photos")[1]); | |
var listPh = []; | |
var isOpera = !(this.opera === undefined);//в "старой" Опере можно сохранять удобнее, не открывая "простыню" из всех фотографий. | |
function sendReq(){ | |
var Ajax = new XMLHttpRequest(); | |
Ajax.onreadystatechange=function(){ | |
if(Ajax.readyState === 4 && Ajax.status === 200){ | |
var resp = Ajax.responseText; | |
resp = resp.split("<!json>")[1].split("<!>")[0]; //нужный кусок начинается с <!json> и кончается <!><!json> | |
resp = JSON.parse(resp); | |
console.log("Page "+Math.ceil(offset/10)+") got, processing."); //данные выдаются пакетами по 10 фотографий | |
var photosProcessed = listPh.length; //запоминаем, с какой позиции будем записывать в итоговый массив текущий пакет данных | |
for(f=0;f<resp.length;f++){ | |
listPh.push([resp[f].id]); | |
for (i in resp[f]) //перебираем все свойства вида "..._src" - это ссылки на разные размеры | |
if(i.split("_")[1]=="src") | |
listPh[f+photosProcessed].push(resp[f][i]); | |
} //для просто сохранения нам все размеры не нужны, это задел на будущее | |
if(offset > 10){ | |
offset-=(offset>9)?10:offset; | |
//setTimeout(sendReq, 100); | |
sendReq(); | |
} | |
else | |
showList(); | |
} | |
}; | |
Ajax.open("GET","https://vk.com/al_photos.php?act=show&al=1&direction=-1&list="+album+"&offset="+offset,true); | |
Ajax.send(); //^--листаем с конца в начало | |
} | |
function showList(){ | |
if(isOpera){ | |
var wnd = window.open(""); | |
wnd.document.write("<h1>Откройте боковую панель 'Ссылки', выделите все, кликните правой и нажмите 'Сохранить по ссылке как...'</h1>"); | |
} | |
else | |
document.write("<h1>Вы можете сохранить эту страницу целиком вместе с картинками.</h1>"); | |
for(i=0;i<listPh.length;i++) | |
if(!isOpera) | |
document.write("<img src='"+(listPh[i][listPh[i].length-1])+"'> "); | |
else | |
wnd.document.write("<a href='"+(listPh[i][listPh[i].length-1])+"'>Link №"+i+"</a> "); | |
} | |
sendReq(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment