Всем привет. Хочу представить свой шаблон по поиску изображений на бесплатном фотостоке pixabay.com.
Расскажу более подробно, что было сделано.
Для работы через api нужно изучить документацию на https://pixabay.com/api/docs/
После простой регистрации на этой же странице нужно сохранить свой API key.
Чтобы далее работать с ответом по api, необходимо его десерелизовать. Для этого будем использовать библиотеку Newtonsoft. Скачаем её на официальном сайте https://www.newtonsoft.com/json и добавим в References.
Чтобы удобно было работать с ответом от pixabay, создадим отдельный класс. Ускорить этот процесс поможет этот сервис http://json2csharp.com/ Вставляем в него пример ответа в формате json, в ответ от отдает класс, для работы с ответом.
В нашем случае это будет:
Добавим этот код в Общий код и пропишем директиву Using.
Теперь рассмотрим, как замерить время выполнения шаблона. Для этого вначале кода пишем:
В конце кода получаем текущее время и вычисляем разницу между временем старта:
Так как шаблон работает на api, то мы можем при сохранении результатов использовать не последовательный цикл for, более быстрый Parallel.For. Для этого добавим в Using строку
Теперь запишем вместо цикла for
цикл Parallel.For
Как видите, различие не очень большое, но как это скажется на скорости работы? Вы можете протестировать на своем компьютере, у меня 200 картинок при цикле for сохраняются за 155 секунд. При цикле Parallel.For - за 27 секунд. Более, чем в 5 раз.
Однако, учтите, что цикл Parallel.For не подходит для работы через браузер, только через запросы.
В дальнейшем, планирую реализовать этот шаблон в виде отдельной библиотеки, чтобы более просто использовать его в других шаблонах, где требуются бесплатные изображения в хорошем качестве.
Спасибо за внимание!
- Лицензия https://pixabay.com позволяет использовать изображения как в
личных целях, так и в коммерческих, поэтому это абсолютно "белый" проект.
- Шаблон работает по api, что позволяет скачивать сотни изображений за
несколько десятков секунд без существенной нагрузки на компьютер.
- В шаблоне будет рассмотрено, как сделать замер времени, которые тратит
шаблон на выполнение (от старта до завершения).
- Будет рассказано о том, как десерелизовать ответ в формате json, чтобы
удобно использовать полученные данные (будет создан отдельный класс).
- В шаблоне предусмотрено сохранение полученных фото через цикл for и
Parallel.For.
личных целях, так и в коммерческих, поэтому это абсолютно "белый" проект.
- Шаблон работает по api, что позволяет скачивать сотни изображений за
несколько десятков секунд без существенной нагрузки на компьютер.
- В шаблоне будет рассмотрено, как сделать замер времени, которые тратит
шаблон на выполнение (от старта до завершения).
- Будет рассказано о том, как десерелизовать ответ в формате json, чтобы
удобно использовать полученные данные (будет создан отдельный класс).
- В шаблоне предусмотрено сохранение полученных фото через цикл for и
Parallel.For.
Расскажу более подробно, что было сделано.
Для работы через api нужно изучить документацию на https://pixabay.com/api/docs/
После простой регистрации на этой же странице нужно сохранить свой API key.
Чтобы далее работать с ответом по api, необходимо его десерелизовать. Для этого будем использовать библиотеку Newtonsoft. Скачаем её на официальном сайте https://www.newtonsoft.com/json и добавим в References.
Чтобы удобно было работать с ответом от pixabay, создадим отдельный класс. Ускорить этот процесс поможет этот сервис http://json2csharp.com/ Вставляем в него пример ответа в формате json, в ответ от отдает класс, для работы с ответом.
В нашем случае это будет:
PHP:
public class Hit
{
public int previewHeight { get; set; }
public int likes { get; set; }
public int favorites { get; set; }
public string tags { get; set; }
public int webformatHeight { get; set; }
public int views { get; set; }
public int webformatWidth { get; set; }
public int previewWidth { get; set; }
public int comments { get; set; }
public int downloads { get; set; }
public string pageURL { get; set; }
public string previewURL { get; set; }
public string webformatURL { get; set; }
public int imageWidth { get; set; }
public int user_id { get; set; }
public string user { get; set; }
public string type { get; set; }
public int id { get; set; }
public string userImageURL { get; set; }
public int imageHeight { get; set; }
}
public class PixabayObject
{
public int totalHits { get; set; }
public List<Hit> hits { get; set; }
public int total { get; set; }
}
Теперь рассмотрим, как замерить время выполнения шаблона. Для этого вначале кода пишем:
PHP:
int startUnixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; // Это будет время начала выполнения шаблона в Unixtime
PHP:
int finishtUnixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; // Время конца выполнения шаблона в Unixtime
int resultTime = finishtUnixTime - startUnixTime; // Время, затраченное на выполнение в Unixtime
DateTime pDate = (new DateTime(1970, 1, 1, 0, 0, 0, 0)).AddSeconds(resultTime); // Конвертация unixTime в секунды
project.SendInfoToLog("Время выполнения: " +resultTime +" секунд");
Код:
using System.Threading.Tasks;
PHP:
for (int i =0; i < pixa.hits.Count; i++) {
url = pixa.hits[i].webformatURL.ToString();
project.SendInfoToLog("Сохранили изображение № " +i);
// Сохранение картинок
ZennoPoster.HttpGet(url, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File, 30000, "", "", true, 3, new String[]{}, directory, true );
// END Сохранение картинок
};
цикл Parallel.For
PHP:
Parallel.For (0, Convert.ToInt32(pixa.hits.Count), x => {
url = pixa.hits[x].webformatURL.ToString();
// Сохранение картинок
ZennoPoster.HttpGet(url, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File, 30000, "", "", true, 3, new String[]{}, directory, true );
// END Сохранение картинок
});
Как видите, различие не очень большое, но как это скажется на скорости работы? Вы можете протестировать на своем компьютере, у меня 200 картинок при цикле for сохраняются за 155 секунд. При цикле Parallel.For - за 27 секунд. Более, чем в 5 раз.
Однако, учтите, что цикл Parallel.For не подходит для работы через браузер, только через запросы.
В дальнейшем, планирую реализовать этот шаблон в виде отдельной библиотеки, чтобы более просто использовать его в других шаблонах, где требуются бесплатные изображения в хорошем качестве.
Спасибо за внимание!
- Категория
- Парсинг
- Номер конкурса шаблонов
- Первый конкурс шаблонов
- Уровень сложности
- Продвинутый
Вложения
-
23,7 КБ Просмотры: 740
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.