Задать вопрос
AllDecay
@AllDecay
Вечно отдыхающий.

Как скачивать изображения с сайта по мере их поступления?

Есть одна доска с изображениями, которые формируются на ней в таком формате: 2016-02-08-808706.jpeg(png или jpg) (к примеру). и каждое добавленное изображение меняет ссылку на +1 к текущему: 2016-02-08-808706(+1).jpeg(png или jpg). Следующий код только скачивает изображения, номера которых указаны в переменной files.
var http = require('http');
var fs = require('fs');
function nowDate(date) {
    var date = new Date();

    var dd = date.getDate();
    if (dd < 10) dd = '0' + dd;

    var mm = date.getMonth() + 1;
    if (mm < 10) mm = '0' + mm;

    var yy = date.getFullYear();

    return yy + '-' + mm + '-' + dd;
}

var uploadDir = "C:\/Node\/";

var files = [
    808707+1
];

files.forEach( function (fileName) {
    var file = fs.createWriteStream(uploadDir + fileName+'.jpeg');
    var request = http.get("http://example/images/"+nowDate()+'-'+fileName+'.jpeg', function (response) {
        response.pipe(file);
    });
})

Суть вопроса: как сделать, чтобы номера изображений формировались циклично и скачивались по мере их поступления на доску (т.е пустые изображения не создавались). И еще, т.к изображения на доске имеют форматы jpeg, jpg, png, как их тоже скачивать по такому же алгоритму?
  • Вопрос задан
  • 372 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@OVK2015
После обработки напильником

var path = require('path');
var request = require('request');
var http = require('http');
var fs = require('fs');

var uploadDir = 'C:\/Node\/';
var urlPrefix = 'http://e-shuushuu.net/images/';
var regExpImageURLWrapper = new RegExp('(?:<img src="\/images\/thumbs\/)(.*?)"', 'gim');
var pageAmount = 2;

function getCurrentImage(imageUrl)
{
	var fileName = path.join(uploadDir, imageUrl);

	var newRequest = request(urlPrefix + imageUrl);
	newRequest.pause();
	newRequest.on('response', function(resp) 
	{
		if((resp.statusCode === 200) && (resp.headers['content-type'].match('image')))
		{			
			newRequest.pipe(fs.createWriteStream(fileName));
			newRequest.resume();
			console.log(`Загружаем: ${imageUrl}`);			
		}
		else
		{
			var message =  
				'\n********************************************************\n' +
				'Ошибка загрузки файла ' + urlPrefix + imageUrl + '\n' +
				'Код ошибки: ' + resp.statusCode + ' ' + resp.statusMessage + '; ' +
				'Mime-type: ' + resp.headers['content-type'] + '\n' +
				'********************************************************\n';
			console.log(`${message}`);
			newRequest.end();			
		}				
	});	
	newRequest.on('end', function()
	{		
		console.log(`Загрузка завершена: ${imageUrl}`);			
	});
}

for(var page_counter = 1; page_counter < pageAmount; page_counter++)
{
    var newRequest = request
	(
	    'http://e-shuushuu.net/?page=' + page_counter,
	    function (error, response, body)
	    {
	        if (!error && response.statusCode == 200)
	        {
	            while(match = regExpImageURLWrapper.exec(body))
	            {	             
	                getCurrentImage(match[1]);
	                // break;
	            }
	        }
    	}
	);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
abyrkov
@abyrkov
JavaScripter
Ничего не понял. И Jpeg = jpg
Ответ написан
AllDecay
@AllDecay Автор вопроса
Вечно отдыхающий.
Все еще нуждаюсь в ответе
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 16:42
2000 руб./за проект
18 дек. 2024, в 16:33
2000 руб./в час
18 дек. 2024, в 16:06
5000 руб./за проект