Привет, гость!

Добро пожаловать на CVVBOARD - крупнейший теневой кардинг форум. У нас Вы сможете найти огромное множество статей по теме кардинга и заработка в интернете. Актуальная информация, новости даркнета, сервисы от проверенных продавцов, эксклюзивные, только рабочие схемы заработка, ежедневные раздачи - все это Вы найдете на нашем форуме! Не пренебрегайте услугами Гарант-Сервиса это убережет Вас от мошенников. Обратите внимание, звание модератора не является гарантом в сделках!

YouTube Cookie Parser

Xanthias

Опытный user
Регистрация
3 Апр 2021
Сообщения
802
Реакции
62
Всем привет,
Недавно делал чекер YouTube по кукам и решил поделится с вами.
Возможно смогу сэкономить ваше время.
Может есть способы делать это лучше, я этого не выяснял.

-----------------------------------------------------------------------------------------------

Для свободного хождения по запросам нам понадобится:
__Secure-1PSID
__Secure-1PAPISID
CHANNEL_ID
API_KEY
SAPISIDHASH

-----------------------------------------------------------------------------------------------

Приступим

Ещё одна вариация кода, более простой способ







Код Python:




class ChannelInformation():

def __init__(self, title: str, channel_id: str, subscriberCount: int, videoCount: int,
totalVideoViewCount: int, country: str, joinedDateText: str, joinedDateYear: int, isMonetized: bool,
cookies: dict):
self.title = title
self.channel_id = channel_id
self.subscriberCount = subscriberCount
self.videoCount = videoCount
self.totalVideoViewCount = totalVideoViewCount
self.country = country
self.joinedDateText = joinedDateText
self.joinedDateYear = joinedDateYear
self.isMonetized = isMonetized
self.cookies = cookies
self.path = None
self.password = 0

def __repr__(self):
return f"{self.title} - {self.subscriberCount}"

def SetPath(self, path: str) -> str:
self.path = path
return self.path

def SetPassword(self):
self.password = 1

async def YouTubeChecker(COOKIES: dict) -> tuple:
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
}

async with aiohttp.ClientSession() as session:
response = await session.get("https://studio.youtube.com/", headers=headers, cookies=COOKIES)
if response.status != 200:
return (False,)
response_text = await response.text()
if "CHANNEL_ID" in response_text:
channel_title = re.findall(r"title\":\"(.*?)\"", response_text)[0].strip()
channel_id = re.findall(r"CHANNEL_ID\":\"(.*?)\"", response_text)[0].strip()
channel_subscriberCount = int(re.findall(r"subscriberCount\":\"(.*?)\"", response_text)[0].strip())
channel_videoCount = int(re.findall(r"videoCount\":\"(.*?)\"", response_text)[0].strip())
channel_isMonetized = re.findall(r"isMonetized\":(.*?),", response_text)[1].strip()
channel_totalVideoViewCount = int(re.findall(r"totalVideoViewCount\":\"(.*?)\"", response_text)[0].strip())
channel_country = re.findall(r"featureCountry\":\"(.*?)\"", response_text)[0].strip()

response = await session.get(f"https://www.youtube.com/channel/{channel_id}/about", headers=headers,
cookies=COOKIES)
response_text = await response.text()
response_text = response_text[response_text.index("joinedDateText")::]
channel_joinedDateText = re.findall(r"text\":\"(.*?)\"", response_text)[1].strip()
channel_joinedDateYear = int(re.findall("\d\d\d\d", channel_joinedDateText)[0].strip())
return (True, ChannelInformation(channel_title, channel_id, channel_subscriberCount,
channel_videoCount, channel_totalVideoViewCount, channel_country,
channel_joinedDateText, channel_joinedDateYear, channel_isMonetized,
COOKIES))
return (False,)



















__Secure-1PSID, __Secure-1PAPISID - Сами печеньки, достаются специальным расширением в браузере по типу EditThisCookie, или же они валяются у вас влогах =)
Хорошокуки у нас есть теперь приступим к коду.





Код Python:




import requests
class YouTube(object):
base_headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
}


def __init__(self, cookies: dict):
self.__CHANNEL_ID = None
self.__API_KEY = None
self.__SAPISIDHASH = None


self.cookies = cookies
self.session = requests.Session()
self.session.headers.update(self.base_headers)
self.load_cookies()

def load_cookies(self) -> None:
for key, value in self.cookies.items():
self.session.cookies.set(key, value)














Создаем класс, далее в конструкторе производим базовую настройку сессии с помощью которой будем отправлять запросы.​

Метод load_cookies просто подгружаеткуки в сессию​

Начинаем доставать нужны нам атрибуты, напишем ещё парочку методов.​




Код Python:




import requests
import hashlib
import re
import time


class YouTube(object):
base_headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
}
origin = 'https://studio.youtube.com'
referer = f'{origin}/channel/0/monetization'

def __init__(self, cookies: dict):
self.__CHANNEL_ID = None
self.__API_KEY = None
self.__SAPISIDHASH = None

self.cookies = cookies
self.session = requests.Session()
self.session.headers.update(self.base_headers)
self.load_cookies()

def load_cookies(self) -> None:
for key, value in self.cookies.items():
self.session.cookies.set(key, value)

def set_data(self) -> None:
response = self.session.get(self.referer)
self.__CHANNEL_ID = re.findall(r"channelId\":\"(.*?)\"", response.text)[0].strip()
self.__API_KEY = re.findall(r"innertubeApiKey\":\"(.*?)\"", response.text)[0].strip()
hash_authorization = hashlib.sha1(' '.join([str(int(time.time())), self.cookies['__Secure-1PAPISID'], self.origin]).encode()).hexdigest()
self.__SAPISIDHASH = str(int(time.time())) + '_' + hash_authorization


@property
def get_channel_id(self) -> str:
return self.__CHANNEL_ID

@property
def get_api_key(self) -> str:
return self.__API_KEY

@property
def get_sapisidhash(self) -> str:
return self.__SAPISIDHASH
















Метод set_data - Отправляет запрос, поскольку мы не знаем id канала, мы отправляем запрос на 0 id, что перенаправит нас на наш айди.
Тут мы уже сможем получить айди нашего канала, и апи ключ.​

Для получения айди канала и апи ключа, используются регулярки для поиска данных.​



С SAPISIDHASH немного сложнее, данная строка состоит из текущей временной метки, нашего кука __Secure-1PAPISID, и ссылки куда идет запрос, далее все это кодируется в SHA1, данный шифр служит для передачи данных авторизации при запросе.​



get_channel_id, get_api_key, get_sapisidhash обычные геттеры, которые возвращают информацию.

-----------------------------------------------------------------------------------------------

Теперь мы собрали все необходимые данные для отправки POST запросов.
Для примера я возьму запрос на получение информации о монетизации.
Подготовим наши хедеры и параметры запроса. В параметрах указывается какую информацию мы хотим получить от сервера




Код Python:




headers = {

'authorization': f'SAPISIDHASH {self.__SAPISIDHASH}',
'origin': self.origin,
'referer': self.origin + f'/channel/{self.__CHANNEL_ID}/monetization',
}

params = {"context": {
"client": {"clientName": 62, "clientVersion": "1.20220518.02.00", "hl": "ru", "gl": "BY",
"experimentsToken": "",
"utcOffsetMinutes": 180, "screenWidthPoints": 1880, "screenHeightPoints": 374,
"screenPixelDensity": 1,
"screenDensityFloat": 1, "userInterfaceTheme": "USER_INTERFACE_THEME_DARK"}}, "channelIds": [self.__CHANNEL_ID],
"mask": {"features": {"all": False},
"channelUiCustomization": {"all": False},
"permissions": {"overallPermissions": False},
"channelId": True,
"monetizationStatus": True,
"monetizationDetails": {"all": True},
"contentOwnerAssociation": {"all": False},
"settings": {"coreSettings": {"featureCountry": False, "country": True},
"copyright": {"copyrightAgreementStatus": False}, "studio": {"all": True}},
"contracts": {"all": False},
"title": True,
"thumbnailDetails": {"all": False},
"isPartner": True,
"metric": {"all": False},
"timeCreatedSeconds": False,
"isMonetized": True,
"isOfficialArtistChannel": True,
"isNameVerified": True,
"sponsorships": {"all": False},
"selfCertification": {"all": False},
"channelVisibility": False,
"interstitials": {"all": False},
"monetizationStatusData": {"all": True}}}















После подготовки можем смело отправлять POST запрос.​

По итогу вы получите JSON с всем данными, по примеру информации о монетизации, вы сможете получить любую информацию с творческой студии ютуба.​

Итоговый код




Код Python:




import requests
import hashlib
import re
import time


class YouTube(object):
base_headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
}
origin = 'https://studio.youtube.com'
referer = f'{origin}/channel/0/monetization'

def __init__(self, cookies: dict):
self.__CHANNEL_ID = None
self.__API_KEY = None
self.__SAPISIDHASH = None

self.cookies = cookies
self.session = requests.Session()
self.session.headers.update(self.base_headers)
self.load_cookies()

def load_cookies(self) -> None:
for key, value in self.cookies.items():
self.session.cookies.set(key, value)

def set_data(self) -> None:
response = self.session.get(self.referer)
self.__CHANNEL_ID = re.findall(r"channelId\":\"(.*?)\"", response.text)[0].strip()
self.__API_KEY = re.findall(r"innertubeApiKey\":\"(.*?)\"", response.text)[0].strip()
hash_authorization = hashlib.sha1(
' '.join([str(int(time.time())), self.cookies['__Secure-1PAPISID'], self.origin]).encode()).hexdigest()
self.__SAPISIDHASH = str(int(time.time())) + '_' + hash_authorization

def get_data_of_monetization(self) -> dict:
headers = {
'authorization': f'SAPISIDHASH {self.__SAPISIDHASH}',
'origin': self.origin,
'referer': self.origin + f'/channel/{self.__CHANNEL_ID}/monetization',
}

params = {"context": {
"client": {"clientName": 62, "clientVersion": "1.20220518.02.00", "hl": "ru", "gl": "BY",
"experimentsToken": "",
"utcOffsetMinutes": 180, "screenWidthPoints": 1880, "screenHeightPoints": 374,
"screenPixelDensity": 1,
"screenDensityFloat": 1, "userInterfaceTheme": "USER_INTERFACE_THEME_DARK"}},
"channelIds": [self.__CHANNEL_ID],
"mask": {"features": {"all": False},
"channelUiCustomization": {"all": False},
"permissions": {"overallPermissions": False},
"channelId": True,
"monetizationStatus": True,
"monetizationDetails": {"all": True},
"contentOwnerAssociation": {"all": False},
"settings": {"coreSettings": {"featureCountry": False, "country": True},
"copyright": {"copyrightAgreementStatus": False}, "studio": {"all": True}},
"contracts": {"all": False},
"title": True,
"thumbnailDetails": {"all": False},
"isPartner": True,
"metric": {"all": False},
"timeCreatedSeconds": False,
"isMonetized": True,
"isOfficialArtistChannel": True,
"isNameVerified": True,
"sponsorships": {"all": False},
"selfCertification": {"all": False},
"channelVisibility": False,
"interstitials": {"all": False},
"monetizationStatusData": {"all": True}}}

response = self.session.post(
f'https://studio.youtube.com/youtubei/v1/creator/get_creator_channels?alt=json&key={self.__API_KEY}'
json=params, headers=headers)
return response.json()

@property
def get_channel_id(self) -> str:
return self.__CHANNEL_ID

@property
def get_api_key(self) -> str:
return self.__API_KEY

@property
def get_sapisidhash(self) -> str:
return self.__SAPISIDHASH


if __name__ == '__main__':
cookie = {'__Secure-1PSID': 'YOUR COOKIE',
'__Secure-1PAPISID': 'YOUR COOKIE'
}

client = YouTube(cookie)
client.set_data()
response = client.get_data_of_monetization()[/B]

















-----------------------------------------------------------------------------------------------

На этом все, повторюсь что возможно есть способ легче или лучше, не берусь спорить.
 

Embrin98

Опытный user
Регистрация
27 Май 2021
Сообщения
810
Реакции
28
Через либу requests куки не убиваются? С использование undetected_selenium думаю было бы надежнее хоть и скорость работы сильно упадет
 

Willwood

Опытный user
Регистрация
13 Фев 2020
Сообщения
673
Реакции
51
Читаю вторую статью по чекерам и это ахуенно. Спасибо батя
 
Сверху Снизу