RockHammer Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 (изменено) Итак, нужно написать программку, которая будет скачивать определенный файл с определенного линка.Линк файла будет меняться в программе, т.е. vk.com/video1 - скачали - записали на диск - дальше уже будет vk.com/video2 эта цифра должна автоматически прибавляться по еденичке.При этом, она будет менять его расширение (не конвертировать, а просто менять расширение с .ts на .avi)И переименовывать. Имя будет задаваться путем номера скачиваемого файла. Т.е. качаю второй файл - изменить название файла на 2.avi (к примеру) Как я представляю себе работу программы:1. Берем линк, например, vk.com/video1 и проверяем его на существование. 2. Линк существует, качаем видео по этому линку (vk.com/video1)3. Скачали, меняем его имя на его порядковый номер (vk.com/video1) + .avi (меняем формат и имя) = 1.avi 4. Записываем получившееся на диск в заранее заданную папку. Любую.5. Прибавляем счетчик загруженных файлов. vk.com/video1 -> vk.com/video2 (прибавляем счетчик на одну цифру) Собственно, всё. Это уже получился цикл. Он завершится тогда, когда от нового значение счетчика не придет ложь (первый пункт "проверка на существование" вернет false).Возможно ли такое написать?P.s. линк vk.com/video произвольный и не является реальной ссылкой. Изменено 27 июня, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 Как насчет VK API + libcurl?http://habrahabr.ru/sandbox/57173/http://habrahabr.ru/post/168343/ Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 27 июня, 2015 Автор Поделиться Опубликовано 27 июня, 2015 (изменено) Как насчет VK API + libcurl?http://habrahabr.ru/sandbox/57173/http://habrahabr.ru/post/168343/Сайт будет не vk. Это будет облачный сервак на котором находятся видео файлы, которые и нужно скачать.Линк = http://cloud.foxford.ru/hls/webinar-23801.mp4/123.ts (жирные цифры - те, которые будут меняться при загрузке.P.s. модеры добавьте это в шапку Изменено 27 июня, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 Сайт будет не vk. Это будет облачный сервак на котором находятся видео файлы, которые и нужно скачать. P.s. модеры добавьте это в шапкуЧто в твоем понимании "облачный" сервак? Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 27 июня, 2015 Автор Поделиться Опубликовано 27 июня, 2015 Что в твоем понимании "облачный" сервак?Любой линк, в названии которого есть "cloud". Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 Любой линк, в названии которого есть "cloud". У меня плохие новости для тебя.Почитай, хотя бы что такое "облако".https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%87%D0%BD%D0%BE%D0%B5_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%87%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-----По поводу выдергивания видео со страницы, ты можешь хорошенько изучить структуру сайта (исходный код страниц, js код) и наверняка найдешь там, способ получения видео. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 winhttp заюзай. там примеров на С++ море. а можно готовое заюзать - wget +cmd винды.. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 27 июня, 2015 Автор Поделиться Опубликовано 27 июня, 2015 (изменено) winhttp заюзай. там примеров на С++ море. а можно готовое заюзать - wget +cmd винды..Эм... а что такое "wget + cmd винды"? Изменено 27 июня, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 Эм... а что такое "wget + cmd винды"?https://ru.wikipedia.org/wiki/Wget Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 Если не брезгуешь C#, то вот пример скачивания аватары через .bat файл (сохранить как *.bat , разрешить фаерволлу или антивирю запустить) 1. Не нужна среда разработки, не нужно устанавливать компилятор2. Похож на C++3. Код короткий, описания и примеры на MSDNПоменяй код под свою задачу, чтобы по циклу скачивал и сохранял, и дело в шляпе./*@echo off && cls && echo Loading... && echo.set WinDirNet=%WinDir%\Microsoft.NET\Frameworkif exist "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"if exist "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"if exist "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"if "%csc%" == "" ( echo .NET Framework not found! && echo. && pause && exit )%csc% /nologo /out:"%~dpnx0.exe" "%~dpnx0"if not "%ERRORLEVEL%" == "0" ( echo. && pause && exit )cls"%~dpnx0.exe" %*del "%~dpnx0.exe"exit*/using System;using System.Net;using System.Net.Sockets;public class Example{ public static void Main() { string remoteUri = @"http://forum.gamehacklab.ru/uploads/profile/"; string fileName = "photo-1.jpg", myStringWebResource = null; WebClient myWebClient = new WebClient(); myStringWebResource = remoteUri + fileName; Console.WriteLine(myStringWebResource); myWebClient.DownloadFile(new Uri(myStringWebResource), fileName); Console.WriteLine(fileName, myStringWebResource); }} 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
KaLaSh Опубликовано 27 июня, 2015 Поделиться Опубликовано 27 июня, 2015 У большинства облачных хранилищ есть свое API и даже SDK.Ну, а то, что в API для облака есть метод загрузки файла можно и не сомневаться, а потом просто переименовать скаченный файл. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 28 июня, 2015 Автор Поделиться Опубликовано 28 июня, 2015 Если не брезгуешь C#, то вот пример скачивания аватары через .bat файл (сохранить как *.bat , разрешить фаерволлу или антивирю запустить) 1. Не нужна среда разработки, не нужно устанавливать компилятор2. Похож на C++3. Код короткий, описания и примеры на MSDNПоменяй код под свою задачу, чтобы по циклу скачивал и сохранял, и дело в шляпе. Я не умею писать на с#, только на c++. /*@echo off && cls && echo Loading... && echo.set WinDirNet=%WinDir%\Microsoft.NET\Frameworkif exist "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"if exist "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"if exist "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"if "%csc%" == "" ( echo .NET Framework not found! && echo. && pause && exit )%csc% /nologo /out:"%~dpnx0.exe" "%~dpnx0"if not "%ERRORLEVEL%" == "0" ( echo. && pause && exit )cls"%~dpnx0.exe" %*del "%~dpnx0.exe"exit*/using System;using System.Net;using System.Net.Sockets;public class Example{ public static void Main() { string remoteUri = @"http://forum.gamehacklab.ru/uploads/profile/"; string fileName = "photo-1.jpg", myStringWebResource = null; WebClient myWebClient = new WebClient(); myStringWebResource = remoteUri + fileName; Console.WriteLine(myStringWebResource); myWebClient.DownloadFile(new Uri(myStringWebResource), fileName); Console.WriteLine(fileName, myStringWebResource); }} Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 28 июня, 2015 Автор Поделиться Опубликовано 28 июня, 2015 а можно готовое заюзать - wget +cmd винды..Есть примеры использования такой схемы? Ссылка на комментарий Поделиться на другие сайты Поделиться
Крайслер Опубликовано 28 июня, 2015 Поделиться Опубликовано 28 июня, 2015 если ссылки прямые, то можно не изобретать велосипед и зделать как советуют "профи":доворачиваем для работоспособности дерективы:С путями:Написано "на коленке" и не в коем случаи не притендует на полную работоспособность. Предаставлен в качестве алгоритма действий)NullAlex: Большой код принято оборачивать в спойлер. Читай FAQ по тегу.bool DownloadFile(char* szUrl, char* szPath){ HINTERNET hOpen = NULL; HINTERNET hFile = NULL; HANDLE hOut = NULL; char* lpBuffer = NULL; DWORD dwBytesRead = 0; DWORD dwBytesWritten = 0; hOpen = InternetOpen("MyAgent", NULL, NULL, NULL, NULL); if (!hOpen) return false; hFile = InternetOpenUrl(hOpen, szUrl, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, NULL); if (!hFile) { InternetCloseHandle(hOpen); return false; } char sz_velikost[50]; //DWORD dwBytesRead = 0; DWORD dwTOTALSize = sizeof(sz_velikost); BYTE buffer[2048]; /*dwTOTALSize =*/ HttpQueryInfoW(hFile, HTTP_QUERY_CONTENT_LENGTH, sz_velikost, &dwTOTALSize, 0); int temp = atoi((LPCTSTR)sz_velikost); sprintf(Info_Key, "%d", temp); MessageBoxA(0, Info_Key, 0, 0);//Info_Key hOut = CreateFile(szPath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL); if (hOut == INVALID_HANDLE_VALUE) { InternetCloseHandle(hFile); InternetCloseHandle(hOpen); return false; } do { lpBuffer = new char[2000]; ZeroMemory(lpBuffer, 2000); InternetReadFile(hFile, (LPVOID)lpBuffer, 2000, &dwBytesRead); WriteFile(hOut, &lpBuffer[0], dwBytesRead, &dwBytesWritten, NULL); delete[] lpBuffer; lpBuffer = NULL; } while (dwBytesRead); CloseHandle(hOut); InternetCloseHandle(hFile); InternetCloseHandle(hOpen); return true;}#include <wininet.h>#pragma comment(lib,"wininet")DownloadFile("http://*************/files/starter/File.rar", "File.rar");start:int i = 0;char Path[MAX_SIZE];char strURL[MAX_SIZE];sprintf_s(Path,"SaveFile_%i.avi",i);sprintf_s(strURL,"http://*************/files/VideoFile_%i.avi",i);if(DownloadFile(strURL, Path)){i++; goto start;//если любитель АСМ то можеша красиво оформить _asm jmp start} Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 28 июня, 2015 Поделиться Опубликовано 28 июня, 2015 Есть примеры использования такой схемы?справку смотри. он может качать все по порядку без костылей. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 28 июня, 2015 Автор Поделиться Опубликовано 28 июня, 2015 Написано "на коленке" и не в коем случаи не притендует на полную работоспособность. Предаставлен в качестве алгоритма действий)NullAlex: Совсем необязательно цитировать большое сообщение полностью. Устное предупреждение. Выдает оочень много ошибок. Поменял на мультибайтовую кодировку - ничего. И вот тут: char Path[MAX_SIZE]; жирный шрифт не определен Ссылка на комментарий Поделиться на другие сайты Поделиться
Крайслер Опубликовано 28 июня, 2015 Поделиться Опубликовано 28 июня, 2015 (изменено) Выдает оочень много ошибок. Поменял на мультибайтовую кодировку - ничего. И вот тут: char Path[MAX_SIZE]; жирный шрифт не определенОК))Смотри:Создаю проект(Win32 - Консоль), прописываю туда код, который предоставил выше. Дабавляю немного визуализации и логгирования(по минимуму). ЗАливаю файл на Rghost.ru (Ссылка) (для тестирования, так как этот сервис отдает прямые ссылки). Получаем(Ниже спойлер): Я не учитывал некоторые моменты, но алгоритм рабочий... дальше сам)) ЗЫ: Где прочитать про теги и BB-коды?#include #include #include #include #pragma comment(lib,"wininet")int i = 0;bool DownloadFile(char* szUrl, char* szPath){HINTERNET hOpen = NULL;HINTERNET hFile = NULL;HANDLE hOut = NULL;char* lpBuffer = NULL;DWORD dwBytesRead = 0;DWORD dwBytesWritten = 0;hOpen = InternetOpen("MyAgent", NULL, NULL, NULL, NULL);if (!hOpen) return false;hFile = InternetOpenUrl(hOpen, szUrl, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, NULL);if (!hFile) {InternetCloseHandle(hOpen);return false;}hOut = CreateFile(szPath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL);if (hOut == INVALID_HANDLE_VALUE){InternetCloseHandle(hFile);InternetCloseHandle(hOpen);return false;}do {lpBuffer = new char[2000];ZeroMemory(lpBuffer, 2000);InternetReadFile(hFile, (LPVOID)lpBuffer, 2000, &dwBytesRead);WriteFile(hOut, &lpBuffer[0], dwBytesRead, &dwBytesWritten, NULL);delete[] lpBuffer;lpBuffer = NULL;} while (dwBytesRead);CloseHandle(hOut);InternetCloseHandle(hFile);InternetCloseHandle(hOpen);return true;}int Start(){start:char Path[MAX_PATH];char strURL[MAX_PATH] = "http://rghost.ru/download/68vBbLW9C/19ac08e7d180849ffcf9ea77b4fbf4c5ea812587/Dx11_ModelLogger%20x64.dll";sprintf_s(Path, "Dx11_ModelLogger__%i.dll", i);//sprintf_s(strURL, "http://*************/files/VideoFile_%i.avi",i);if (DownloadFile(strURL, Path)){i++;printf("SaveFile::%s \n", Path);_asm jmp start}elsereturn 0;}int main(){SetConsoleTitle("[DEMO]RockHammer");Start();getch();return 0;} Изменено 30 июня, 2015 пользователем Xipho Заголовок у спойлера тоже указывать обязательно. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 28 июня, 2015 Автор Поделиться Опубликовано 28 июня, 2015 (изменено) Смотри:Создаю проект(Win32 - Консоль), прописываю туда код, который предоставил выше. Дабавляю немного визуализации и логгирования(по минимуму). ЗАливаю файл на Rghost.ru (Ссылка) (для тестирования, так как этот сервис отдает прямые ссылки). Получаем(Ниже спойлер):Всё теже ошибки... Похоже, что функции внутри библиотеки wininet не распознаются. И sprintf_s функция отсутствует (подключил iostream, всё равно)Конкретно, не распознаются функции:1. InternetOpen2. InternetOpenUrl3. InternetCloseHandle4. HttpQueryInfoW5. Info_Key6. InternetReadFile7. sprintf_s (писал выше) Все ошибки, которые выскакивают - находятся внутри бибилотеки wininet.Делал всё по инструкции. 100%.P.s. У тебя слегка битый код под спойлером. Всё отрывочно... Или так задумано?) Изменено 28 июня, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
Крайслер Опубликовано 28 июня, 2015 Поделиться Опубликовано 28 июня, 2015 Все ошибки, которые выскакивают - находятся внутри бибилотеки wininet. Делал всё по инструкции. 100%. P.s. У тебя слегка битый код под спойлером. Всё отрывочно... Или так задумано?) незнаю как прекрепить фаилы к сообщение, поэтому внешняя ссылка на полный проект:Скачать (в архиве нету исполняемых фаилов) Если так же будут ошибки, то смотри в сторону комплекта своего MS SDK. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 28 июня, 2015 Автор Поделиться Опубликовано 28 июня, 2015 (изменено) незнаю как прекрепить фаилы к сообщение, поэтому внешняя ссылка на полный проект:Скачать (в архиве нету исполняемых фаилов) Если так же будут ошибки, то смотри в сторону комплекта своего MS SDK.Спасибо, заработало Правда до сих пор не пойму как... Ведь тоже самое было... Может быть студия слегка приболела. Образовалась новая проблемка))Нужно преобразовать это:http://cloud.foxford.ru/hls/webinar-23801.mp4/119.tsВ это:char strURL[MAX_PATH] = "http://cloud.foxford.ru/hls/webinar-23801.mp4/" + i + ".ts";Где i = порядковому номеру загрузки. Дело в том, что этих .ts файлов там дофигища, начиная с первого. нужно все их загрузить. Можно ли так сделать со ссылкой, чтобы редактировать её внутри программы? Изменено 28 июня, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
Крайслер Опубликовано 28 июня, 2015 Поделиться Опубликовано 28 июня, 2015 char strURL[MAX_SIZE]; sprintf_s(strURL,"http://cloud.foxford.ru/hls/webinar-23801.mp4/%i.ts",i); Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 29 июня, 2015 Автор Поделиться Опубликовано 29 июня, 2015 char strURL[MAX_SIZE];sprintf_s(strURL,"http://cloud.foxford.ru/hls/webinar-23801.mp4/%i.ts",i);Нет, не в логах, а в ссылке самой.Просто сайт, который я хочу "обмануть" разбил один видео файл на кучу маленьких. Нужно все эти маленькие файлы скачать, благо они расположены по одному адресу, только номер файла меняется (это самый конец ссылки) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 июня, 2015 Поделиться Опубликовано 30 июня, 2015 Сейчас многие видео-сайты так делают. Это называется NLS. Что это - го в вики. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 30 июня, 2015 Автор Поделиться Опубликовано 30 июня, 2015 (изменено) char strURL[MAX_SIZE]; sprintf_s(strURL,"http://cloud.foxford.ru/hls/webinar-23801.mp4/%i.ts",i); 2 IntelliSense: идентификатор "MAX_SIZE" не определен -> исправил на MAX_PATH, заиграло. P.s. как ограничить это всё? Тоесть сделать условие цикла, чтоли: загрузка продолжается, пока ссылка рабочая. Т.е. я не знаю конечную цифру загрузки: может быть это будет 1000, а может 1543. Сейчас прога очень хорошо загружает, но нужно чтобы она это загрузила и выкинула сообщение что завершила работу, т.е. типо всё, приехали. Или делать чек: если загружаемый файл меньше либо равно 2 кб - то не загружать его, или удалять. Изменено 30 июня, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 июля, 2015 Поделиться Опубликовано 1 июля, 2015 А на C# код очень простой. Грузит последовательно до 1КК файлов до первой ошибки. Опять же если не брезгуешь, *,bat, C#. Всего лишь запустить батник из папки и в неё все закачается до первой ошибки. Анивирь или фаервол отключить либо заранее, либо добавить в разрешение во время работы. * Перед применением скрипта стоит обратить внимание на условия пользовательского соглашения (я уже не помню ссылку на него). Копирование данных запрещено этим способом. Хотя ссылки на медиа файлы публичные и постоянны, что странно. Также код выше подходит для многих сайтов, которые разбивают видео файлы на куски. Если известная хотя бы одна из ссылок, то можно скачать все последовательно./*@echo off && cls && echo Loading... && echo.set WinDirNet=%WinDir%\Microsoft.NET\Frameworkif exist "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"if exist "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"if exist "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"if "%csc%" == "" ( echo .NET Framework not found! && echo. && pause && exit )%csc% /nologo /out:"%~dpnx0.exe" "%~dpnx0"if not "%ERRORLEVEL%" == "0" ( echo. && pause && exit )cls"%~dpnx0.exe" %*del "%~dpnx0.exe"exit*/using System;using System.Net;using System.Net.Sockets;public class Example{ public static void Main() { string remoteUri = @"http://cloud.foxford.ru/hls/webinar-23801.mp4/"; string fileNameMask = "{0}.ts", myStringWebResource = null; WebClient myWebClient = new WebClient(); int countError = 0; for(var i=0; i<=1000000; i++) { try { var fileName = string.Format(fileNameMask, i); myStringWebResource = remoteUri + fileName; Console.WriteLine(myStringWebResource); myWebClient.DownloadFile(new Uri(myStringWebResource), fileName); Console.WriteLine(fileName, myStringWebResource); } catch { countError++; } if(countError > 0) break; } }} Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения