35Photo ru: социальная сеть для профессиональных фотографов

галерея-dl/35photo.py на мастере · mikf/gallery-dl · GitHub

9/?#]+)»
# —*- кодировка: utf-8 —*-
# Copyright 2019-2022 Майк Ферманн
#
# Эта программа является бесплатным программным обеспечением; вы можете распространять его и/или модифицировать
# это согласно условиям Стандартной общественной лицензии GNU версии 2 как
# опубликован Free Software Foundation.
«»»Экстракторы для https://35photo. pro/»»»
из .common import Extractor, сообщение
из .. текст импорта
класс _35photoExtractor(Extractor):
категория = «35 фото»
directory_fmt = («{категория}», «{пользователь}»)
filename_fmt = «{id}{название:?_//}_{номер:>02}.{расширение}»
archive_fmt = «{id}_{num}»
корень = «https://35photo. pro»
предметов защиты (на себя):
сначала = Правда
данные = self.metadata()
для photo_id в self.photos():
для фото в себе._photo_data(photo_id):
фото.обновление(данные)
URL = фото[«url»]
если первый:
сначала = Ложь
yield Message. Directory, фото
yield Message.Url, url, text.nameext_from_url(url, photo)
определение метаданных (я):
«»»Возвращает общие метаданные»»»
возврат {}
фотографий определения (я):
«»»Возвращает итерируемый объект, содержащий все соответствующие идентификаторы фотографий»»»
def _pagination(self, params, extra_ids=None):
URL = «https://35photo. pro/show_block.php»
заголовков = {«Referer»: self.root, «X-Requested-With»: «XMLHttpRequest»}
параметры[«тип»] = «getNextPageData»
, если «lastId» отсутствует в параметрах:
параметров[«lastId»] = «999999999»
если extra_ids:
выход из extra_ids
, а параметры[«lastId»]:
data = self.request(url, headers=headers, params=params).json()
доход от self. _photo_ids(data[«data»])
параметры[«lastId»] = данные[«lastId»]
по определению _photo_data(self, photo_id):
params = {«method»: «photo.getData», «photoId»: photo_id}
данные = self.request(
«https://api.35photo.pro/», params=params).json()[«data»][photo_id]
информация = {
«url»: данные[«источник»],
«id»: данные [«photo_id»],
«заголовок»: данные[«имя_фотографии»],
«описание»: данные[«photo_desc»],
«теги» : данные [«теги»] или [],
«просмотров»: данные[«photo_see»],
«избранное»: данные[«photo_fav»],
«оценка»: данные[«photo_rating»],
«тип»: данные[«тип_фотографии»],
«дата»: данные[«timeAdd»],
«пользователь»: данные[«user_login»],
«user_id»: данные[«user_id»],
«имя_пользователя»: данные[«имя_пользователя»],
}
, если «серия» в данных:
для информации [«num»], фото в enumerate(data[«series»], 1):
информация[«url»] = фото[«источник»]
информация[«id_series»] = text. parse_int(фото[«id»])
info[«title_series»] = фото[«title»] или «»
выход info.copy()
иначе:
информация[«число»] = 1
выходная информация
@статический метод
по определению _photo_ids(страница):
«»»Извлечь уникальные идентификаторы фотографий и вернуть их в виде отсортированного списка»»»
# поиск photo-id=». ..» не всегда работает (см. модульные тесты)
если не страница:
возврат ()
вернуть отсортированный(
набор(text.extract_iter(страница, «/photo_», «/»)),
ключ=text.parse_int,
реверс=Истина,
)
класс _35photoUserExtractor(_35photoExtractor): 9/?#]+)»)
тест = (
(«https://35photo. pro/liya», {
«шаблон»: r»https://([a-z][0-9]\.)?35photo\.pro»
r»/photos_(main|series)/.*\.jpg»,
«количество»: 9,
}),
(«https://35photo.pro/suhoveev», {
# идентификатор последней фотографии (1267028) не указан как ‘photo-id=»»
# всего 23 фото без последней
«количество»: «>= 33»,
}),
(«https://ru. 35photo.pro/liya»),
(«https://ru.35photo.pro/liya»),
)
по определению __init__(я, совпадение):
_35photoExtractor.__init__(я, совпадение)
self.user = match.group(1)
self.user_id = 0
определение метаданных (я):
url = «{}/{}/».format(self.root, self.user)
страница = self. request(url).text
self.user_id = text.parse_int(text.extr(страница, «/user_», «.xml»))
возврат {
«пользователь»: self.user,
«user_id»: self.user_id,
}
фотографий определения (я):
вернуть self._pagination({
«страница»: «фото пользователя»,
«user_id»: self.user_id,
})
класс _35photoTagExtractor (_35photoExtractor):
«»»Извлечение всех фотографий из списка тегов»»»
подкатегория = «тег»
directory_fmt = («{категория}», «Теги», «{search_tag}»)
archive_fmt = «t{search_tag}_{id}_{num}»
тест = («https://35photo. pro/tags/landscape/», {
«диапазон»: «1-25»,
«количество»: 25,
«архив»: Ложь,
})
по определению __init__(я, совпадение):
_35photoExtractor.__init__(я, совпадение)
self.tag = match.group(1)
определение метаданных (я):
возврат {«search_tag»: text. unquote(self.tag).lower()}
фотографий определения (я):
число = 1
, правда:
url = «{}/tags/{}/list_{}/».format(self.root, self.tag, число)
страница = self.request(url).text
пред. = нет
для photo_id в text.extract_iter(страница, «35photo.pro/photo_», «/»):
если photo_id != пред:
пред. = photo_id
выход photo_id
если не пред:
возврат
число += 1
класс _35photoGenreExtractor(_35photoExtractor):
«»»Экстрактор изображений определенного жанра на 35photo.pro»»»
подкатегория = «жанр»
directory_fmt = («{категория}», «Жанр», «{жанр}»)
archive_fmt = «g{genre_id}_{id}_{num}»
шаблон = r»(?:https?://)?(?:[a-z]+\. )?35photo\.pro/genre_(\d+)(/new/)?»
тест = («https://35photo.pro/genre_109/»,)
по определению __init__(я, совпадение):
_35photoExtractor.__init__(я, совпадение)
self.genre_id, self.new = match.groups()
self.photo_ids = Нет
определение метаданных (я):
url = «{}/genre_{}{}».format(self.root, self.genre_id, self.new или «/»)
страница = self. request(url).text
self.photo_ids = self._photo_ids(text.extr( ​​
9Страница 0005, «L195» номер строки данных = «195»/> возврат {
«жанр»: text.extr(страница, «жанр -«, «.»),
«genre_id»: text.parse_int(self.genre_id),
}
фотографий определения (я):
, если не self.photo_ids:
возврат ()
вернуть self. _pagination({
«страница»: «жанр»,
«community_id»: self.genre_id,
«photo_rating»: «0», если self.new еще «50»,
«lastId»: self.photo_ids[-1],
}, self.photo_ids)
класс _35photoImageExtractor (_35photoExtractor):
«»»Вытягиватель отдельных изображений с 35photo.pro»»»
подкатегория = «изображение»
шаблон = r»(?:https?://)?(?:[a-z]+\. )?35photo\.pro/photo_(\d+)»
тест = («https://35photo.pro/photo_753340/», {
«количество»: 1,
«ключевое слово»: {
«url» : r»re:https://35photo\.pro/photos_main/.*\.jpg»,
«идентификатор»: 753340,
«название»: «Зимняя прогулка»,
«Описание»: ул,
«теги»: список,
«просмотров»: целое число,
«избранное»: целое число,
«счет» : целое,
«тип»: 0,
«дата» : «15 авг, 2014»,
«пользователь»: «лия»,
«user_id»: 20415,
«user_name»: «Лия Мирзаева»,
},
})
по определению __init__(я, совпадение):
_35photoExtractor. __init__(я, совпадение)
self.photo_id = match.group(1)
фотографий определения (я):
возврат (self.photo_id,)

35Photo | Tiktok Search

Tiktok

Загрузка

Ethanmediavilla57

Ethanmediavilla57

EthanMediaLilla57 (@@ThanMediaVilla57

EthanMediaLilla 577). ТикТок

39 лайков, видео TikTok от ethanmediavilla57 (@ethanmediavilla57). 35 фото Другая любовь — Том Оделл.

5518 просмотров|

Another Love — Tom Odell

laceyhastings20

Лейси Хастингс

Все мои любимые люди🤍

63 лайка, видео в TikTok от Лейси Хастингс (@laceyhastings20): «Все мои любимые люди🤍 2022 год в 35 фото🥰 Желтый — Coldplay.

1367 просмотров|

Желтый — Coldplay

wnidd

NİDD 🥷🏻

Tiktok — это новый Twitter FR #FYP #SomethingJustsnappan #Pictures #Relatable

280 Likes, Tiktok Video от NIP 🥷🏻 🥷🏻 🥷🏻 🥷🏻 что-то только что щелкнуло #картинки #относящиеся». POV: этот звук на твоём файпе с 35 картинками Prince vegeta — Simply😵‍💫.

44,9 тыс. просмотров|

Prince vegeta — Simply😵‍💫

lamees_dardas

lameesdardas1999

2022 в 35 фото🥹🤍 #FYP #Foryoupage #Foryou #2022 #Trend foryou #2022 #трендовое #фото». 2022 На 35 фото тренд сезона 2022 x Часы от Coldplay — СОВЕТЫ ПО СОЗДАНИЮ КОНТЕНТА.

1810 просмотров|

Тренд сезона 2022 x Часы от Coldplay — СОВЕТЫ ПО СОЗДАНИЮ КОНТЕНТА

marouuasl

Maroua ✨

Прощай 2022 🫶🏼 Всегда один 👸🏼 . . . . . . . . #trend #challenge #instagram #newyear #2022 #hijabstyle #hijab #hijabfashion #hijaber #algeria #algerienne🇩🇿 #algerienne #makeupartist #CapCut

548 лайков, видео в TikTok от Maroua ✨ (@marouuasl): «Прощай, 2022 🫶🏼 Всегда одна 👸🏼 . . . instagram . . . . . . #hijabstyle #hijab #hijabfashion #hijaber #algeria #algerienne🇩🇿 #algerienne #визажист #CapCut». Гизли ашк — Ускорился.

11,9 тыс. просмотров|

Gizli aşk — Sped up

wpc_dinamo_tbilisi

WPC Dinamo Tbilisi

Lets sum up 2022 ✊🏻💦 #sumup2022 #fakebodyy⚠️ #dinamo #ფორიუ #challenge #trends #friends #photos

318 Likes, TikTok видео от WPC Dinamo Tbilisi (@wpc_dinamo_tbilisi): «Подводим итоги 2022 ✊🏻💦 #sumup2022 #fakebodyy⚠️ #dinamo #ფორიუ #ch #ch оригинальный звук — CAPCUT TEMPLATES.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *