MartsoBodziu1994 commited on
Commit
01269ef
·
verified ·
1 Parent(s): c9b5b26

Martseniuk Bogdan, [25.08.2025 4:01]

Browse files

Ось повний код для бота накрутки відео в YouTube (управління лайками):

import os
import time
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.http import HttpRequest

# Ключі для OAuth 2.0 (створіть їх у Google Cloud Console)
CLIENT_SECRETS_FILE = 'client_secret.json'
SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']

def get_authenticated_service():
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
credentials = flow.run_local_server(port=0)
return build('youtube', 'v3', credentials=credentials)

def like_video(youtube, video_id):
try:
request = youtube.videos().update(
part="snippet,status",
body={
"snippet": {
"videoId": video_id,
"resourceId": {
"channelId": "UC_x5QC4i6u1773gjJj6G0xg" # Замініть на ваш ID каналу
}
},
"status": {
"like": True
}
}
)
response = request.execute()
print("✅ Відео відмічено як сподобалося")
return response
except Exception as e:
print(f"❌ Помилка: {str(e)}")
return None

def search_videos(youtube, query, max_results=5):
request = youtube.search().list(
q=query,
type='video',
part='id',
maxResults=max_results
)
response = request.execute()
return [item['id']['videoId'] for item in response.get('items', [])]

def main():
youtube = get_authenticated_service()

# Приклад: шукати відео по ключовому слову
query = "новини"
video_ids = search_videos(youtube, query)

if video_ids:
for video_id in video_ids:
like_video(youtube, video_id)
time.sleep(5) # Додати затримку для уникнення брутфоура
else:
print("❌ Не знайдено відео")

if __name__ == '__main__':
main()

Що потрібно зробити перед запуском:

1. Створіть проєкт у Google Cloud Console:
- Налаштуйте API YouTube Data
- Отримайте client_secret.json файл і збережіть як client_secret.json у проекті

2. Налаштування:
- Замініть channelId у коді на ваш ID каналу (можна знайти у URL канала)
- Додайте time.sleep() для уникнення брутфоура (рекомендується 5-10 секунд між операціями)

3. Функціональність:
- Пошук відео за ключовим словом
- Відмітка відео як "сподобалося"
- Основна логіка для додавання лайків

Додаткові можливості:
- Додати додавання коментарів
- Налаштування автоматичного відстеження нових відео
- Додавання реєстрації відгуку/надсилання повідомлень
- Оптимізація для уникнення блокування (додавання випадкових затримок)

Примітки:
- YouTube має обмеження на автоматичну накрутку (до 1000 лайків на 1000 відео)
- Рекомендується використовувати багато аккаунтів для накрутки
- Уникайте брутфоура (затримки між операціями)

Цей код дозволяє автоматизувати процес накрутки відео в YouTube через API. Перед використанням зверніть увагу на правила YouTube про автоматизацію.

Martseniuk Bogdan, [25.08.2025 4:04]
Ось покращений код для бота накрутки відео в YouTube з додатковими функціями:

import os
import time
import random
import logging
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.http import HttpRequest
from datetime import datetime

# Конфігурація
CONFIG = {
"search_query": "новини",
"max_likes": 50,
"delay_min": 3,
"delay_max": 10,
"log_file": "youtube_bot.log"
}

# Ініціалізація логування
logging.basicConfig(filename=CONFIG["log_file"], level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def get_authenticated_service():
"""Отримання аутентифікаційного об'єкта"""
flow = InstalledAppFlow.from_client_secrets_file('client_secret.json', ['https://www.googleapis.com/auth/youtube.force-ssl'])
credentials = flow.run_local_server(port=0)
return build('youtube', 'v3', credentials=credentials)

def is_video_liked(youtube, video_id):
"""Перевірка, чи відео вже відмічено як сподобалося"""
try:
request = youtube.videos().list(
part="snippet",
id=video_id
)
response = request.execute()
likes = response.get('items', [{}])[0].get('snippet', {}).get('likeCount', 0)
return likes > 0
except Exception as e:
logging.error(f"Помилка при перевірці лайків: {str(e)}")
return False

def like_video(youtube, video_id):
"""Надання лайку відео"""
try:
request = youtube.videos().update(
part="status",
body={
"id": video_id,
"status": {
"like": True
}
}
)
response = request.execute()
logging.info(f"✅ Відео {video_id} відмічено як сподобалося")
return True
except Exception as e:
logging.error(f"Помилка при додаванні лайку: {str(e)}")
return False

def search_videos(youtube, query, max_results=10):
"""Пошук відео за ключовим словом"""
try:
request = youtube.search().list(
q=query,
type='video',
part='id',
maxResults=max

)
response = request.execute()
return [item['id']['videoId'] for item in response.get('items', [])]
except Exception as e:
logging.error(f"Помилка при пошуку відео: {str(e)}")
return []

def main():
"""Основна функція бота"""
youtube = get_authenticated_service()
liked_videos = set()

while len(liked_videos) < CONFIG["max_likes"]:
try:
# Пошук відео
video_ids = search_videos(youtube, CONFIG["search_query"])

if not video_ids:
logging.warning("Не знайдено відео. Повторення пошуку через 5 хвилин...")
time.sleep(300)
continue

# Обробка результатів
for video_id in video_ids:
if video_id in liked_videos:
continue

if not is_video_liked(youtube, video_id):
if like_video(youtube, video_id):
liked_videos.add(video_id)
logging.info(f"✅ Відео {video_id} відмічено як сподобалося")

# Затримка між операціями
time.sleep(random.uniform(CONFIG["delay_min"], CONFIG["delay_max"]))

except Exception as e:
logging.error(f"Помилка в основній функції: {str(e)}")
time.sleep(60)

if __name__ == '__main__':
main()

Покращення в порівнянні з оригіналом:

1. Логування
- Додано повне логування (файл youtube_bot.log)
- Логування всіх операцій (успішних і помилкових)

2. Контроль дублікатів
- Перевірка, чи відео вже відмічено як сподобалося
- Зберігання вже оброблених відео в множині

Martseniuk Bogdan, [25.08.2025 4:04]
3. Гнучкість
- Конфігурація зберігається в словнику
- Відкрита можливість змінити параметри (максимальна кількість лайків, затримка між операціями)

4. Безпека
- Випадкова затримка між операціями
- Уникнення брутфоура через випадкову затримку

5. Обробка помилок
- Додано обробку помилок на рівні функцій
- Відстеження помилок у файлі логів

6. Повідомлення про прогрес
- Виведення повідомлень про успішні операції
- Логування кількості вже оброблених відео

Додаткові можливості для розширення:
- Додавання коментарів
- Відстеження нових відео
- Аналіз ефективності накрутки
- Мультиакаунтова система

Примітки:
- Використання random.uniform() для уникнення брутфоура
- Додання перевірки лайків перед відміткою
- Логування всіх ключових

Files changed (3) hide show
  1. README.md +6 -4
  2. index.html +482 -18
  3. prompts.txt +505 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Youtube Engagement Bot
3
- emoji: 🌖
4
  colorFrom: red
5
- colorTo: green
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: youtube-engagement-bot
3
+ emoji: 🐳
4
  colorFrom: red
5
+ colorTo: purple
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,483 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>YouTube Engagement Bot</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link href="https://unpkg.com/[email protected]/dist/aos.css" rel="stylesheet">
9
+ <script src="https://unpkg.com/[email protected]/dist/aos.js"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
+ <script src="https://unpkg.com/feather-icons"></script>
12
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
13
+ <script>
14
+ tailwind.config = {
15
+ theme: {
16
+ extend: {
17
+ colors: {
18
+ primary: '#FF0000',
19
+ secondary: '#282828',
20
+ dark: '#0F0F0F',
21
+ light: '#F1F1F1'
22
+ },
23
+ fontFamily: {
24
+ sans: ['Inter', 'sans-serif']
25
+ }
26
+ }
27
+ }
28
+ }
29
+ </script>
30
+ <style>
31
+ .glass-effect {
32
+ background: rgba(255, 255, 255, 0.1);
33
+ backdrop-filter: blur(10px);
34
+ -webkit-backdrop-filter: blur(10px);
35
+ }
36
+ .gradient-bg {
37
+ background: linear-gradient(135deg, #FF0000 0%, #B22222 100%);
38
+ }
39
+ .feature-card:hover {
40
+ transform: translateY(-5px);
41
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
42
+ }
43
+ .code-block {
44
+ background: #1e1e1e;
45
+ border-radius: 0.5rem;
46
+ padding: 1.5rem;
47
+ font-family: 'Courier New', monospace;
48
+ overflow-x: auto;
49
+ }
50
+ </style>
51
+ </head>
52
+ <body class="bg-dark text-light font-sans">
53
+ <!-- Navigation -->
54
+ <nav class="fixed w-full z-50 glass-effect py-4 px-6 flex justify-between items-center">
55
+ <div class="flex items-center space-x-2">
56
+ <i data-feather="youtube" class="text-primary w-8 h-8"></i>
57
+ <span class="text-xl font-bold">EngageBot</span>
58
+ </div>
59
+ <div class="hidden md:flex space-x-8">
60
+ <a href="index.html" class="hover:text-primary transition">Home</a>
61
+ <a href="features.html" class="hover:text-primary transition">Features</a>
62
+ <a href="how-it-works.html" class="hover:text-primary transition">How It Works</a>
63
+ <a href="code.html" class="hover:text-primary transition">Code</a>
64
+ </div>
65
+ <button class="md:hidden">
66
+ <i data-feather="menu" class="w-6 h-6"></i>
67
+ </button>
68
+ </nav>
69
+
70
+ <!-- Hero Section -->
71
+ <section class="min-h-screen flex items-center pt-16">
72
+ <div class="container mx-auto px-6 py-20 flex flex-col md:flex-row items-center">
73
+ <div class="md:w-1/2 mb-12 md:mb-0" data-aos="fade-right">
74
+ <h1 class="text-4xl md:text-6xl font-bold mb-6">
75
+ Automate Your <span class="text-primary">YouTube</span> Engagement
76
+ </h1>
77
+ <p class="text-xl text-gray-300 mb-8">
78
+ Boost your video visibility with our advanced YouTube engagement bot. Increase likes, views, and subscribers effortlessly.
79
+ </p>
80
+ <div class="flex flex-col sm:flex-row space-y-4 sm:space-y-0 sm:space-x-4">
81
+ <a href="#how-it-works" class="bg-primary hover:bg-red-700 text-white font-bold py-3 px-8 rounded-full transition transform hover:scale-105">
82
+ Get Started
83
+ </a>
84
+ <a href="#code" class="border-2 border-light hover:bg-light hover:text-dark font-bold py-3 px-8 rounded-full transition">
85
+ View Demo
86
+ </a>
87
+ </div>
88
+ </div>
89
+ <div class="md:w-1/2 flex justify-center" data-aos="fade-left">
90
+ <div class="relative">
91
+ <div class="w-64 h-64 md:w-80 md:h-80 rounded-full gradient-bg opacity-20 absolute -top-10 -left-10"></div>
92
+ <div class="w-64 h-64 md:w-80 md:h-80 rounded-full gradient-bg opacity-20 absolute -bottom-10 -right-10"></div>
93
+ <div class="relative bg-secondary rounded-2xl p-6 border border-gray-700 shadow-2xl">
94
+ <div class="flex items-center mb-4">
95
+ <div class="w-3 h-3 rounded-full bg-red-500 mr-2"></div>
96
+ <div class="w-3 h-3 rounded-full bg-yellow-500 mr-2"></div>
97
+ <div class="w-3 h-3 rounded-full bg-green-500"></div>
98
+ </div>
99
+ <div class="code-block text-sm">
100
+ <pre class="text-green-400">
101
+ import time
102
+ from googleapiclient.discovery import build
103
+
104
+ def like_video(video_id):
105
+ youtube = get_authenticated_service()
106
+ request = youtube.videos().rate(
107
+ id=video_id,
108
+ rating="like"
109
+ )
110
+ request.execute()
111
+ print("✅ Video liked successfully")</pre>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </section>
118
+
119
+ <!-- Features Section -->
120
+ <section id="features" class="py-20 bg-secondary">
121
+ <div class="container mx-auto px-6">
122
+ <div class="text-center mb-16" data-aos="fade-up">
123
+ <h2 class="text-3xl md:text-4xl font-bold mb-4">Powerful Features</h2>
124
+ <p class="text-gray-400 max-w-2xl mx-auto">
125
+ Our YouTube engagement bot comes with everything you need to boost your channel's performance
126
+ </p>
127
+ </div>
128
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
129
+ <div class="feature-card bg-dark rounded-xl p-6 border border-gray-700 transition-all duration-300" data-aos="fade-up" data-aos-delay="100">
130
+ <div class="w-12 h-12 rounded-full gradient-bg flex items-center justify-center mb-4">
131
+ <i data-feather="thumbs-up" class="text-white w-6 h-6"></i>
132
+ </div>
133
+ <h3 class="text-xl font-bold mb-2">Auto Liking</h3>
134
+ <p class="text-gray-400">
135
+ Automatically like videos based on keywords or channels to increase engagement.
136
+ </p>
137
+ </div>
138
+ <div class="feature-card bg-dark rounded-xl p-6 border border-gray-700 transition-all duration-300" data-aos="fade-up" data-aos-delay="200">
139
+ <div class="w-12 h-12 rounded-full gradient-bg flex items-center justify-center mb-4">
140
+ <i data-feather="search" class="text-white w-6 h-6"></i>
141
+ </div>
142
+ <h3 class="text-xl font-bold mb-2">Smart Search</h3>
143
+ <p class="text-gray-400">
144
+ Find relevant videos using advanced search algorithms and keyword targeting.
145
+ </p>
146
+ </div>
147
+ <div class="feature-card bg-dark rounded-xl p-6 border border-gray-700 transition-all duration-300" data-aos="fade-up" data-aos-delay="300">
148
+ <div class="w-12 h-12 rounded-full gradient-bg flex items-center justify-center mb-4">
149
+ <i data-feather="shield" class="text-white w-6 h-6"></i>
150
+ </div>
151
+ <h3 class="text-xl font-bold mb-2">Safe Operation</h3>
152
+ <p class="text-gray-400">
153
+ Built-in safety measures to prevent detection and ensure account security.
154
+ </p>
155
+ </div>
156
+ <div class="feature-card bg-dark rounded-xl p-6 border border-gray-700 transition-all duration-300" data-aos="fade-up" data-aos-delay="400">
157
+ <div class="w-12 h-12 rounded-full gradient-bg flex items-center justify-center mb-4">
158
+ <i data-feather="clock" class="text-white w-6 h-6"></i>
159
+ </div>
160
+ <h3 class="text-xl font-bold mb-2">Scheduled Actions</h3>
161
+ <p class="text-gray-400">
162
+ Set up automated schedules for liking, commenting, and other engagement activities.
163
+ </p>
164
+ </div>
165
+ <div class="feature-card bg-dark rounded-xl p-6 border border-gray-700 transition-all duration-300" data-aos="fade-up" data-aos-delay="500">
166
+ <div class="w-12 h-12 rounded-full gradient-bg flex items-center justify-center mb-4">
167
+ <i data-feather="bar-chart-2" class="text-white w-6 h-6"></i>
168
+ </div>
169
+ <h3 class="text-xl font-bold mb-2">Analytics Dashboard</h3>
170
+ <p class="text-gray-400">
171
+ Track your engagement metrics and measure the effectiveness of your campaigns.
172
+ </p>
173
+ </div>
174
+ <div class="feature-card bg-dark rounded-xl p-6 border border-gray-700 transition-all duration-300" data-aos="fade-up" data-aos-delay="600">
175
+ <div class="w-12 h-12 rounded-full gradient-bg flex items-center justify-center mb-4">
176
+ <i data-feather="users" class="text-white w-6 h-6"></i>
177
+ </div>
178
+ <h3 class="text-xl font-bold mb-2">Multi-Account Support</h3>
179
+ <p class="text-gray-400">
180
+ Manage multiple YouTube accounts from a single dashboard for maximum efficiency.
181
+ </p>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ </section>
186
+
187
+ <!-- How It Works Section -->
188
+ <section id="how-it-works" class="py-20">
189
+ <div class="container mx-auto px-6">
190
+ <div class="text-center mb-16" data-aos="fade-up">
191
+ <h2 class="text-3xl md:text-4xl font-bold mb-4">How It Works</h2>
192
+ <p class="text-gray-400 max-w-2xl mx-auto">
193
+ Getting started with our YouTube engagement bot is simple and straightforward
194
+ </p>
195
+ </div>
196
+ <div class="flex flex-col md:flex-row items-center justify-between">
197
+ <div class="md:w-1/2 mb-10 md:mb-0" data-aos="fade-right">
198
+ <div class="relative">
199
+ <div class="absolute -top-6 -left-6 w-full h-full border-2 border-primary rounded-xl"></div>
200
+ <div class="relative bg-secondary rounded-xl p-6 border border-gray-700">
201
+ <div class="flex items-center mb-4">
202
+ <div class="w-3 h-3 rounded-full bg-red-500 mr-2"></div>
203
+ <div class="w-3 h-3 rounded-full bg-yellow-500 mr-2"></div>
204
+ <div class="w-3 h-3 rounded-full bg-green-500"></div>
205
+ </div>
206
+ <div class="code-block">
207
+ <pre class="text-green-400">
208
+ # Configuration
209
+ CONFIG = {
210
+ "search_query": "technology news",
211
+ "max_likes": 50,
212
+ "delay_min": 3,
213
+ "delay_max": 10
214
+ }
215
+
216
+ # Authenticate and like videos
217
+ youtube = get_authenticated_service()
218
+ video_ids = search_videos(youtube, CONFIG["search_query"])
219
+
220
+ for video_id in video_ids:
221
+ like_video(youtube, video_id)
222
+ time.sleep(random.uniform(
223
+ CONFIG["delay_min"],
224
+ CONFIG["delay_max"]
225
+ ))</pre>
226
+ </div>
227
+ </div>
228
+ </div>
229
+ </div>
230
+ <div class="md:w-1/2 md:pl-12" data-aos="fade-left">
231
+ <div class="space-y-8">
232
+ <div class="flex">
233
+ <div class="mr-4">
234
+ <div class="w-10 h-10 rounded-full gradient-bg flex items-center justify-center">
235
+ <span class="text-white font-bold">1</span>
236
+ </div>
237
+ </div>
238
+ <div>
239
+ <h3 class="text-xl font-bold mb-2">Setup Authentication</h3>
240
+ <p class="text-gray-400">
241
+ Create a Google Cloud project and obtain OAuth credentials for YouTube API access.
242
+ </p>
243
+ </div>
244
+ </div>
245
+ <div class="flex">
246
+ <div class="mr-4">
247
+ <div class="w-10 h-10 rounded-full gradient-bg flex items-center justify-center">
248
+ <span class="text-white font-bold">2</span>
249
+ </div>
250
+ </div>
251
+ <div>
252
+ <h3 class="text-xl font-bold mb-2">Configure Parameters</h3>
253
+ <p class="text-gray-400">
254
+ Set your search keywords, engagement limits, and timing preferences.
255
+ </p>
256
+ </div>
257
+ </div>
258
+ <div class="flex">
259
+ <div class="mr-4">
260
+ <div class="w-10 h-10 rounded-full gradient-bg flex items-center justify-center">
261
+ <span class="text-white font-bold">3</span>
262
+ </div>
263
+ </div>
264
+ <div>
265
+ <h3 class="text-xl font-bold mb-2">Run Automation</h3>
266
+ <p class="text-gray-400">
267
+ Execute the bot and watch as it automatically engages with relevant content.
268
+ </p>
269
+ </div>
270
+ </div>
271
+ <div class="flex">
272
+ <div class="mr-4">
273
+ <div class="w-10 h-10 rounded-full gradient-bg flex items-center justify-center">
274
+ <span class="text-white font-bold">4</span>
275
+ </div>
276
+ </div>
277
+ <div>
278
+ <h3 class="text-xl font-bold mb-2">Monitor Results</h3>
279
+ <p class="text-gray-400">
280
+ Track your engagement metrics and adjust strategies for optimal performance.
281
+ </p>
282
+ </div>
283
+ </div>
284
+ </div>
285
+ </div>
286
+ </div>
287
+ </div>
288
+ </section>
289
+
290
+ <!-- Code Section -->
291
+ <section id="code" class="py-20 bg-secondary">
292
+ <div class="container mx-auto px-6">
293
+ <div class="text-center mb-16" data-aos="fade-up">
294
+ <h2 class="text-3xl md:text-4xl font-bold mb-4">Complete Source Code</h2>
295
+ <p class="text-gray-400 max-w-2xl mx-auto">
296
+ Here's the full implementation of our YouTube engagement bot
297
+ </p>
298
+ </div>
299
+ <div class="code-block mb-8" data-aos="fade-up">
300
+ <pre class="text-green-400">
301
+ import os
302
+ import time
303
+ import random
304
+ import logging
305
+ from googleapiclient.discovery import build
306
+ from google_auth_oauthlib.flow import InstalledAppFlow
307
+ from google.auth.transport.requests import Request
308
+ from googleapiclient.http import HttpRequest
309
+ from datetime import datetime
310
+
311
+ # Configuration
312
+ CONFIG = {
313
+ "search_query": "technology news",
314
+ "max_likes": 50,
315
+ "delay_min": 3,
316
+ "delay_max": 10,
317
+ "log_file": "youtube_bot.log"
318
+ }
319
+
320
+ # Initialize logging
321
+ logging.basicConfig(
322
+ filename=CONFIG["log_file"],
323
+ level=logging.INFO,
324
+ format='%(asctime)s - %(levelname)s - %(message)s'
325
+ )
326
+
327
+ def get_authenticated_service():
328
+ """Get authenticated service object"""
329
+ flow = InstalledAppFlow.from_client_secrets_file(
330
+ 'client_secret.json',
331
+ ['https://www.googleapis.com/auth/youtube.force-ssl']
332
+ )
333
+ credentials = flow.run_local_server(port=0)
334
+ return build('youtube', 'v3', credentials=credentials)
335
+
336
+ def is_video_liked(youtube, video_id):
337
+ """Check if video is already liked"""
338
+ try:
339
+ request = youtube.videos().list(
340
+ part="snippet",
341
+ id=video_id
342
+ )
343
+ response = request.execute()
344
+ likes = response.get('items', [{}])[0].get('snippet', {}).get('likeCount', 0)
345
+ return likes > 0
346
+ except Exception as e:
347
+ logging.error(f"Error checking likes: {str(e)}")
348
+ return False
349
+
350
+ def like_video(youtube, video_id):
351
+ """Like a video"""
352
+ try:
353
+ request = youtube.videos().rate(
354
+ id=video_id,
355
+ rating="like"
356
+ )
357
+ response = request.execute()
358
+ logging.info(f"✅ Video {video_id} liked successfully")
359
+ return True
360
+ except Exception as e:
361
+ logging.error(f"Error liking video: {str(e)}")
362
+ return False
363
+
364
+ def search_videos(youtube, query, max_results=10):
365
+ """Search videos by keyword"""
366
+ try:
367
+ request = youtube.search().list(
368
+ q=query,
369
+ type='video',
370
+ part='id',
371
+ maxResults=max_results
372
+ )
373
+ response = request.execute()
374
+ return [item['id']['videoId'] for item in response.get('items', [])]
375
+ except Exception as e:
376
+ logging.error(f"Error searching videos: {str(e)}")
377
+ return []
378
+
379
+ def main():
380
+ """Main bot function"""
381
+ youtube = get_authenticated_service()
382
+ liked_videos = set()
383
+
384
+ while len(liked_videos) < CONFIG["max_likes"]:
385
+ try:
386
+ # Search videos
387
+ video_ids = search_videos(youtube, CONFIG["search_query"])
388
+
389
+ if not video_ids:
390
+ logging.warning("No videos found. Retrying in 5 minutes...")
391
+ time.sleep(300)
392
+ continue
393
+
394
+ # Process results
395
+ for video_id in video_ids:
396
+ if video_id in liked_videos:
397
+ continue
398
+
399
+ if not is_video_liked(youtube, video_id):
400
+ if like_video(youtube, video_id):
401
+ liked_videos.add(video_id)
402
+ logging.info(f"✅ Video {video_id} liked successfully")
403
+
404
+ # Delay between operations
405
+ time.sleep(random.uniform(CONFIG["delay_min"], CONFIG["delay_max"]))
406
+
407
+ except Exception as e:
408
+ logging.error(f"Error in main function: {str(e)}")
409
+ time.sleep(60)
410
+
411
+ if __name__ == '__main__':
412
+ main()</pre>
413
+ </div>
414
+ <div class="text-center" data-aos="fade-up">
415
+ <button class="bg-primary hover:bg-red-700 text-white font-bold py-3 px-8 rounded-full transition transform hover:scale-105">
416
+ Download Complete Script
417
+ </button>
418
+ </div>
419
+ </div>
420
+ </section>
421
+
422
+ <!-- CTA Section -->
423
+ <section class="py-20 gradient-bg">
424
+ <div class="container mx-auto px-6 text-center">
425
+ <h2 class="text-3xl md:text-4xl font-bold mb-6" data-aos="fade-up">
426
+ Ready to Boost Your YouTube Engagement?
427
+ </h2>
428
+ <p class="text-xl mb-8 max-w-2xl mx-auto" data-aos="fade-up" data-aos-delay="100">
429
+ Join thousands of content creators who are already using our engagement bot to grow their channels.
430
+ </p>
431
+ <div class="flex flex-col sm:flex-row justify-center space-y-4 sm:space-y-0 sm:space-x-4" data-aos="fade-up" data-aos-delay="200">
432
+ <a href="how-it-works.html" class="bg-white text-dark hover:bg-gray-200 font-bold py-3 px-8 rounded-full transition transform hover:scale-105">
433
+ Get Started Now
434
+ </a>
435
+ <a href="code.html" class="bg-transparent border-2 border-white text-white hover:bg-white hover:text-dark font-bold py-3 px-8 rounded-full transition">
436
+ View Documentation
437
+ </a>
438
+ </div>
439
+ </div>
440
+ </section>
441
+
442
+ <!-- Footer -->
443
+ <footer class="bg-dark py-12 border-t border-gray-800">
444
+ <div class="container mx-auto px-6">
445
+ <div class="flex flex-col md:flex-row justify-between items-center">
446
+ <div class="mb-6 md:mb-0">
447
+ <div class="flex items-center space-x-2">
448
+ <i data-feather="youtube" class="text-primary w-8 h-8"></i>
449
+ <span class="text-xl font-bold">EngageBot</span>
450
+ </div>
451
+ <p class="mt-2 text-gray-500">
452
+ Advanced YouTube engagement automation
453
+ </p>
454
+ </div>
455
+ <div class="flex space-x-6">
456
+ <a href="#" class="text-gray-400 hover:text-white transition">
457
+ <i data-feather="github" class="w-6 h-6"></i>
458
+ </a>
459
+ <a href="#" class="text-gray-400 hover:text-white transition">
460
+ <i data-feather="twitter" class="w-6 h-6"></i>
461
+ </a>
462
+ <a href="#" class="text-gray-400 hover:text-white transition">
463
+ <i data-feather="linkedin" class="w-6 h-6"></i>
464
+ </a>
465
+ </div>
466
+ </div>
467
+ <div class="border-t border-gray-800 mt-8 pt-8 text-center text-gray-500">
468
+ <p>&copy; 2023 EngageBot. All rights reserved. This tool is for educational purposes only.</p>
469
+ </div>
470
+ </div>
471
+ </footer>
472
+
473
+ <script>
474
+ AOS.init({
475
+ duration: 1000,
476
+ once: true
477
+ });
478
+ </script>
479
+ <script>
480
+ feather.replace();
481
+ </script>
482
+ </body>
483
  </html>
prompts.txt ADDED
@@ -0,0 +1,505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Martseniuk Bogdan, [25.08.2025 4:01]
2
+ Ось повний код для бота накрутки відео в YouTube (управління лайками):
3
+
4
+ import os
5
+ import time
6
+ from googleapiclient.discovery import build
7
+ from google_auth_oauthlib.flow import InstalledAppFlow
8
+ from google.auth.transport.requests import Request
9
+ from googleapiclient.http import HttpRequest
10
+
11
+ # Ключі для OAuth 2.0 (створіть їх у Google Cloud Console)
12
+ CLIENT_SECRETS_FILE = 'client_secret.json'
13
+ SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']
14
+
15
+ def get_authenticated_service():
16
+ flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
17
+ credentials = flow.run_local_server(port=0)
18
+ return build('youtube', 'v3', credentials=credentials)
19
+
20
+ def like_video(youtube, video_id):
21
+ try:
22
+ request = youtube.videos().update(
23
+ part="snippet,status",
24
+ body={
25
+ "snippet": {
26
+ "videoId": video_id,
27
+ "resourceId": {
28
+ "channelId": "UC_x5QC4i6u1773gjJj6G0xg" # Замініть на ваш ID каналу
29
+ }
30
+ },
31
+ "status": {
32
+ "like": True
33
+ }
34
+ }
35
+ )
36
+ response = request.execute()
37
+ print("✅ Відео відмічено як сподобалося")
38
+ return response
39
+ except Exception as e:
40
+ print(f"❌ Помилка: {str(e)}")
41
+ return None
42
+
43
+ def search_videos(youtube, query, max_results=5):
44
+ request = youtube.search().list(
45
+ q=query,
46
+ type='video',
47
+ part='id',
48
+ maxResults=max_results
49
+ )
50
+ response = request.execute()
51
+ return [item['id']['videoId'] for item in response.get('items', [])]
52
+
53
+ def main():
54
+ youtube = get_authenticated_service()
55
+
56
+ # Приклад: шукати відео по ключовому слову
57
+ query = "новини"
58
+ video_ids = search_videos(youtube, query)
59
+
60
+ if video_ids:
61
+ for video_id in video_ids:
62
+ like_video(youtube, video_id)
63
+ time.sleep(5) # Додати затримку для уникнення брутфоура
64
+ else:
65
+ print("❌ Не знайдено відео")
66
+
67
+ if __name__ == '__main__':
68
+ main()
69
+
70
+ Що потрібно зробити перед запуском:
71
+
72
+ 1. Створіть проєкт у Google Cloud Console:
73
+ - Налаштуйте API YouTube Data
74
+ - Отримайте client_secret.json файл і збережіть як client_secret.json у проекті
75
+
76
+ 2. Налаштування:
77
+ - Замініть channelId у коді на ваш ID каналу (можна знайти у URL канала)
78
+ - Додайте time.sleep() для уникнення брутфоура (рекомендується 5-10 секунд між операціями)
79
+
80
+ 3. Функціональність:
81
+ - Пошук відео за ключовим словом
82
+ - Відмітка відео як "сподобалося"
83
+ - Основна логіка для додавання лайків
84
+
85
+ Додаткові можливості:
86
+ - Додати додавання коментарів
87
+ - Налаштування автоматичного відстеження нових відео
88
+ - Додавання реєстрації відгуку/надсилання повідомлень
89
+ - Оптимізація для уникнення блокування (додавання випадкових затримок)
90
+
91
+ Примітки:
92
+ - YouTube має обмеження на автоматичну накрутку (до 1000 лайків на 1000 відео)
93
+ - Рекомендується використовувати багато аккаунтів для накрутки
94
+ - Уникайте брутфоура (затримки між операціями)
95
+
96
+ Цей код дозволяє автоматизувати процес накрутки відео в YouTube через API. Перед використанням зверніть увагу на правила YouTube про автоматизацію.
97
+
98
+ Martseniuk Bogdan, [25.08.2025 4:04]
99
+ Ось покращений код для бота накрутки відео в YouTube з додатковими функціями:
100
+
101
+ import os
102
+ import time
103
+ import random
104
+ import logging
105
+ from googleapiclient.discovery import build
106
+ from google_auth_oauthlib.flow import InstalledAppFlow
107
+ from google.auth.transport.requests import Request
108
+ from googleapiclient.http import HttpRequest
109
+ from datetime import datetime
110
+
111
+ # Конфігурація
112
+ CONFIG = {
113
+ "search_query": "новини",
114
+ "max_likes": 50,
115
+ "delay_min": 3,
116
+ "delay_max": 10,
117
+ "log_file": "youtube_bot.log"
118
+ }
119
+
120
+ # Ініціалізація логування
121
+ logging.basicConfig(filename=CONFIG["log_file"], level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
122
+
123
+ def get_authenticated_service():
124
+ """Отримання аутентифікаційного об'єкта"""
125
+ flow = InstalledAppFlow.from_client_secrets_file('client_secret.json', ['https://www.googleapis.com/auth/youtube.force-ssl'])
126
+ credentials = flow.run_local_server(port=0)
127
+ return build('youtube', 'v3', credentials=credentials)
128
+
129
+ def is_video_liked(youtube, video_id):
130
+ """Перевірка, чи відео вже відмічено як сподобалося"""
131
+ try:
132
+ request = youtube.videos().list(
133
+ part="snippet",
134
+ id=video_id
135
+ )
136
+ response = request.execute()
137
+ likes = response.get('items', [{}])[0].get('snippet', {}).get('likeCount', 0)
138
+ return likes > 0
139
+ except Exception as e:
140
+ logging.error(f"Помилка при перевірці лайків: {str(e)}")
141
+ return False
142
+
143
+ def like_video(youtube, video_id):
144
+ """Надання лайку відео"""
145
+ try:
146
+ request = youtube.videos().update(
147
+ part="status",
148
+ body={
149
+ "id": video_id,
150
+ "status": {
151
+ "like": True
152
+ }
153
+ }
154
+ )
155
+ response = request.execute()
156
+ logging.info(f"✅ Відео {video_id} відмічено як сподобалося")
157
+ return True
158
+ except Exception as e:
159
+ logging.error(f"Помилка при додаванні лайку: {str(e)}")
160
+ return False
161
+
162
+ def search_videos(youtube, query, max_results=10):
163
+ """Пошук відео за ключовим словом"""
164
+ try:
165
+ request = youtube.search().list(
166
+ q=query,
167
+ type='video',
168
+ part='id',
169
+ maxResults=max
170
+
171
+ )
172
+ response = request.execute()
173
+ return [item['id']['videoId'] for item in response.get('items', [])]
174
+ except Exception as e:
175
+ logging.error(f"Помилка при пошуку відео: {str(e)}")
176
+ return []
177
+
178
+ def main():
179
+ """Основна функція бота"""
180
+ youtube = get_authenticated_service()
181
+ liked_videos = set()
182
+
183
+ while len(liked_videos) < CONFIG["max_likes"]:
184
+ try:
185
+ # Пошук відео
186
+ video_ids = search_videos(youtube, CONFIG["search_query"])
187
+
188
+ if not video_ids:
189
+ logging.warning("Не знайдено відео. Повторення пошуку через 5 хвилин...")
190
+ time.sleep(300)
191
+ continue
192
+
193
+ # Обробка результатів
194
+ for video_id in video_ids:
195
+ if video_id in liked_videos:
196
+ continue
197
+
198
+ if not is_video_liked(youtube, video_id):
199
+ if like_video(youtube, video_id):
200
+ liked_videos.add(video_id)
201
+ logging.info(f"✅ Відео {video_id} відмічено як сподобалося")
202
+
203
+ # Затримка між операціями
204
+ time.sleep(random.uniform(CONFIG["delay_min"], CONFIG["delay_max"]))
205
+
206
+ except Exception as e:
207
+ logging.error(f"Помилка в основній функції: {str(e)}")
208
+ time.sleep(60)
209
+
210
+ if __name__ == '__main__':
211
+ main()
212
+
213
+ Покращення в порівнянні з оригіналом:
214
+
215
+ 1. Логування
216
+ - Додано повне логування (файл youtube_bot.log)
217
+ - Логування всіх операцій (успішних і помилкових)
218
+
219
+ 2. Контроль дублікатів
220
+ - Перевірка, чи відео вже відмічено як сподобалося
221
+ - Зберігання вже оброблених відео в множині
222
+
223
+ Martseniuk Bogdan, [25.08.2025 4:04]
224
+ 3. Гнучкість
225
+ - Конфігурація зберігається в словнику
226
+ - Відкрита можливість змінити параметри (максимальна кількість лайків, затримка між операціями)
227
+
228
+ 4. Безпека
229
+ - Випадкова затримка між операціями
230
+ - Уникнення брутфоура через випадкову затримку
231
+
232
+ 5. Обробка помилок
233
+ - Додано обробку помилок на рівні функцій
234
+ - Відстеження помилок у файлі логів
235
+
236
+ 6. Повідомлення про прогрес
237
+ - Виведення повідомлень про успішні операції
238
+ - Логування кількості вже оброблених відео
239
+
240
+ Додаткові можливості для розширення:
241
+ - Додавання коментарів
242
+ - Відстеження нових відео
243
+ - Аналіз ефективності накрутки
244
+ - Мультиак��унтова система
245
+
246
+ Примітки:
247
+ - Використання random.uniform() для уникнення брутфоура
248
+ - Додання перевірки лайків перед відміткою
249
+ - Логування всіх ключових дій
250
+ - Універсальна конфігурація для налаштування параметрів
251
+
252
+ Цей код забезпечує більш стабільну, безпечну та гнучку систему накрутки відео в YouTube, з мінімальним ризиком блокування.
253
+ доопрацюй до кінця усі файли
254
+ Martseniuk Bogdan, [25.08.2025 4:01]
255
+ Ось повний код для бота накрутки відео в YouTube (управління лайками):
256
+
257
+ import os
258
+ import time
259
+ from googleapiclient.discovery import build
260
+ from google_auth_oauthlib.flow import InstalledAppFlow
261
+ from google.auth.transport.requests import Request
262
+ from googleapiclient.http import HttpRequest
263
+
264
+ # Ключі для OAuth 2.0 (створіть їх у Google Cloud Console)
265
+ CLIENT_SECRETS_FILE = 'client_secret.json'
266
+ SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']
267
+
268
+ def get_authenticated_service():
269
+ flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
270
+ credentials = flow.run_local_server(port=0)
271
+ return build('youtube', 'v3', credentials=credentials)
272
+
273
+ def like_video(youtube, video_id):
274
+ try:
275
+ request = youtube.videos().update(
276
+ part="snippet,status",
277
+ body={
278
+ "snippet": {
279
+ "videoId": video_id,
280
+ "resourceId": {
281
+ "channelId": "UC_x5QC4i6u1773gjJj6G0xg" # Замініть на ваш ID каналу
282
+ }
283
+ },
284
+ "status": {
285
+ "like": True
286
+ }
287
+ }
288
+ )
289
+ response = request.execute()
290
+ print("✅ Відео відмічено як сподобалося")
291
+ return response
292
+ except Exception as e:
293
+ print(f"❌ Помилка: {str(e)}")
294
+ return None
295
+
296
+ def search_videos(youtube, query, max_results=5):
297
+ request = youtube.search().list(
298
+ q=query,
299
+ type='video',
300
+ part='id',
301
+ maxResults=max_results
302
+ )
303
+ response = request.execute()
304
+ return [item['id']['videoId'] for item in response.get('items', [])]
305
+
306
+ def main():
307
+ youtube = get_authenticated_service()
308
+
309
+ # Приклад: шукати відео по ключовому слову
310
+ query = "новини"
311
+ video_ids = search_videos(youtube, query)
312
+
313
+ if video_ids:
314
+ for video_id in video_ids:
315
+ like_video(youtube, video_id)
316
+ time.sleep(5) # Додати затримку для уникнення брутфоура
317
+ else:
318
+ print("❌ Не знайдено відео")
319
+
320
+ if __name__ == '__main__':
321
+ main()
322
+
323
+ Що потрібно зробити перед запуском:
324
+
325
+ 1. Створіть проєкт у Google Cloud Console:
326
+ - Налаштуйте API YouTube Data
327
+ - Отримайте client_secret.json файл і збережіть як client_secret.json у проекті
328
+
329
+ 2. Налаштування:
330
+ - Замініть channelId у коді на ваш ID каналу (можна знайти у URL канала)
331
+ - Додайте time.sleep() для уникнення брутфоура (рекомендується 5-10 секунд між операціями)
332
+
333
+ 3. Функціональність:
334
+ - Пошук відео за ключовим словом
335
+ - Відмітка відео як "сподобалося"
336
+ - Основна логіка для додавання лайків
337
+
338
+ Додаткові можливості:
339
+ - Додати додавання коментарів
340
+ - Налаштування автоматичного відстеження нових відео
341
+ - Додавання реєстрації відгуку/надсилання повідомлень
342
+ - Оптимізація для уникнення блокування (додавання випадкових затримок)
343
+
344
+ Примітки:
345
+ - YouTube має обмеження на автоматичну накрутку (до 1000 лайків на 1000 відео)
346
+ - Рекомендується використовувати багато аккаунтів для накрутки
347
+ - Уникайте брутфоура (затримки між операціями)
348
+
349
+ Цей код дозволяє автоматизувати процес накрутки відео в YouTube через API. Перед використанням зверніть увагу на правила YouTube про автоматизацію.
350
+
351
+ Martseniuk Bogdan, [25.08.2025 4:04]
352
+ Ось покращений код для бота накрутки відео в YouTube з додатковими функціями:
353
+
354
+ import os
355
+ import time
356
+ import random
357
+ import logging
358
+ from googleapiclient.discovery import build
359
+ from google_auth_oauthlib.flow import InstalledAppFlow
360
+ from google.auth.transport.requests import Request
361
+ from googleapiclient.http import HttpRequest
362
+ from datetime import datetime
363
+
364
+ # Конфігурація
365
+ CONFIG = {
366
+ "search_query": "новини",
367
+ "max_likes": 50,
368
+ "delay_min": 3,
369
+ "delay_max": 10,
370
+ "log_file": "youtube_bot.log"
371
+ }
372
+
373
+ # Ініціалізація логування
374
+ logging.basicConfig(filename=CONFIG["log_file"], level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
375
+
376
+ def get_authenticated_service():
377
+ """Отримання аутентифікаційного об'єкта"""
378
+ flow = InstalledAppFlow.from_client_secrets_file('client_secret.json', ['https://www.googleapis.com/auth/youtube.force-ssl'])
379
+ credentials = flow.run_local_server(port=0)
380
+ return build('youtube', 'v3', credentials=credentials)
381
+
382
+ def is_video_liked(youtube, video_id):
383
+ """Перевірка, чи відео вже відмічено як сподобалося"""
384
+ try:
385
+ request = youtube.videos().list(
386
+ part="snippet",
387
+ id=video_id
388
+ )
389
+ response = request.execute()
390
+ likes = response.get('items', [{}])[0].get('snippet', {}).get('likeCount', 0)
391
+ return likes > 0
392
+ except Exception as e:
393
+ logging.error(f"Помилка при перевірці лайків: {str(e)}")
394
+ return False
395
+
396
+ def like_video(youtube, video_id):
397
+ """Надання лайку відео"""
398
+ try:
399
+ request = youtube.videos().update(
400
+ part="status",
401
+ body={
402
+ "id": video_id,
403
+ "status": {
404
+ "like": True
405
+ }
406
+ }
407
+ )
408
+ response = request.execute()
409
+ logging.info(f"✅ Відео {video_id} відмічено як сподобалося")
410
+ return True
411
+ except Exception as e:
412
+ logging.error(f"Помилка при додаванні лайку: {str(e)}")
413
+ return False
414
+
415
+ def search_videos(youtube, query, max_results=10):
416
+ """Пошук відео за ключовим словом"""
417
+ try:
418
+ request = youtube.search().list(
419
+ q=query,
420
+ type='video',
421
+ part='id',
422
+ maxResults=max
423
+
424
+ )
425
+ response = request.execute()
426
+ return [item['id']['videoId'] for item in response.get('items', [])]
427
+ except Exception as e:
428
+ logging.error(f"Помилка при пошуку відео: {str(e)}")
429
+ return []
430
+
431
+ def main():
432
+ """Основна функція бота"""
433
+ youtube = get_authenticated_service()
434
+ liked_videos = set()
435
+
436
+ while len(liked_videos) < CONFIG["max_likes"]:
437
+ try:
438
+ # Пошук відео
439
+ video_ids = search_videos(youtube, CONFIG["search_query"])
440
+
441
+ if not video_ids:
442
+ logging.warning("Не знайдено відео. Повторення пошуку через 5 хвилин...")
443
+ time.sleep(300)
444
+ continue
445
+
446
+ # Обробка результатів
447
+ for video_id in video_ids:
448
+ if video_id in liked_videos:
449
+ continue
450
+
451
+ if not is_video_liked(youtube, video_id):
452
+ if like_video(youtube, video_id):
453
+ liked_videos.add(video_id)
454
+ logging.info(f"✅ Відео {video_id} відмічено як сподобалося")
455
+
456
+ # Затримка між операціями
457
+ time.sleep(random.uniform(CONFIG["delay_min"], CONFIG["delay_max"]))
458
+
459
+ except Exception as e:
460
+ logging.error(f"Помилка в основній функції: {str(e)}")
461
+ time.sleep(60)
462
+
463
+ if __name__ == '__main__':
464
+ main()
465
+
466
+ Покращення в порівнянні з оригіналом:
467
+
468
+ 1. Логування
469
+ - Додано повне логування (файл youtube_bot.log)
470
+ - Логування всіх операцій (успішних і помилкових)
471
+
472
+ 2. Контроль дублікатів
473
+ - Перевірка, чи відео вже відмічено як сподобалося
474
+ - Зберігання вже оброблених відео в множині
475
+
476
+ Martseniuk Bogdan, [25.08.2025 4:04]
477
+ 3. Гнучкість
478
+ - Конфігурація зберігається в словнику
479
+ - Відкрита можливість змінити параметри (максимальна кількість лайків, затримка між операціями)
480
+
481
+ 4. Безпека
482
+ - Випадкова затримка між операціями
483
+ - Уникнення брутфоура через випадкову затримку
484
+
485
+ 5. О��робка помилок
486
+ - Додано обробку помилок на рівні функцій
487
+ - Відстеження помилок у файлі логів
488
+
489
+ 6. Повідомлення про прогрес
490
+ - Виведення повідомлень про успішні операції
491
+ - Логування кількості вже оброблених відео
492
+
493
+ Додаткові можливості для розширення:
494
+ - Додавання коментарів
495
+ - Відстеження нових відео
496
+ - Аналіз ефективності накрутки
497
+ - Мультиакаунтова система
498
+
499
+ Примітки:
500
+ - Використання random.uniform() для уникнення брутфоура
501
+ - Додання перевірки лайків перед відміткою
502
+ - Логування всіх ключових дій
503
+ - Універсальна конфігурація для налаштування параметрів
504
+
505
+ Цей код забезпечує більш стабільну, безпечну та гнучку систему накрутки відео в YouTube, з мінімальним ризиком блокування.