Spaces:
Paused
Paused
Update func_facebook.py
Browse files- func_facebook.py +62 -30
func_facebook.py
CHANGED
@@ -19,15 +19,21 @@ def hide_negative_comments(token):
|
|
19 |
user_posts_data = graph.get_object(id='me/posts', fields='id,message,created_time')
|
20 |
user_posts = user_posts_data.get('data', [])
|
21 |
print(f"Найдено {len(user_posts)} пользовательских постов.")
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
26 |
|
27 |
all_posts = user_posts + ads_posts
|
28 |
-
|
|
|
|
|
29 |
|
30 |
-
return
|
31 |
|
32 |
def get_comments_for_post(post_id):
|
33 |
print(f"Получение комментариев для поста {post_id}.")
|
@@ -36,7 +42,11 @@ def hide_negative_comments(token):
|
|
36 |
url = f'{post_id}/comments'
|
37 |
params = {'fields': 'id,message,is_hidden'}
|
38 |
while True:
|
39 |
-
|
|
|
|
|
|
|
|
|
40 |
visible_comments = [comment for comment in comments_data.get('data', []) if not comment.get('is_hidden', False)]
|
41 |
comments.extend(visible_comments)
|
42 |
print(f"Найдено {len(visible_comments)} видимых комментариев для поста {post_id}.")
|
@@ -72,6 +82,8 @@ def hide_negative_comments(token):
|
|
72 |
return []
|
73 |
|
74 |
hidden_comments_per_post = []
|
|
|
|
|
75 |
for post in posts:
|
76 |
post_id = post['id']
|
77 |
post_message = post.get('message', '')
|
@@ -80,11 +92,25 @@ def hide_negative_comments(token):
|
|
80 |
print(f"Нет комментариев для поста {post_id}.")
|
81 |
continue
|
82 |
|
83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
sentiments = analyze_sentiment(comments_text)
|
85 |
-
negative_comments = filter_comments(
|
86 |
|
87 |
-
hidden_comments = []
|
88 |
for comment in negative_comments:
|
89 |
if hide_comment(comment['id']):
|
90 |
hidden_comments.append({
|
@@ -102,6 +128,7 @@ def hide_negative_comments(token):
|
|
102 |
return hidden_comments_per_post
|
103 |
|
104 |
|
|
|
105 |
def get_page_id(page_access_token):
|
106 |
print("Получение ID страницы.")
|
107 |
url = f"{GRAPH_API_URL}/me"
|
@@ -190,31 +217,36 @@ def has_page_replied(comment_id, page_id, page_access_token):
|
|
190 |
"fields": "from{id},message",
|
191 |
}
|
192 |
while True:
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
200 |
return False
|
201 |
-
for reply in data.get("data", []):
|
202 |
-
reply_from = reply.get('from', {})
|
203 |
-
reply_from_id = reply_from.get('id')
|
204 |
-
reply_message = reply.get('message', '')
|
205 |
-
print(f"Найдена реплика от пользователя: {reply_from_id}, сообщение: {reply_message}")
|
206 |
-
if reply_from_id == page_id:
|
207 |
-
print(f"Страница {page_id} уже ответила на комментарий {comment_id}.")
|
208 |
-
return True
|
209 |
-
if 'paging' in data and 'next' in data['paging']:
|
210 |
-
url = data['paging']['next']
|
211 |
-
params = {}
|
212 |
-
else:
|
213 |
-
break
|
214 |
print(f"Страница {page_id} не ответила на комментарий {comment_id}.")
|
215 |
return False
|
216 |
|
217 |
|
|
|
218 |
def get_unanswered_comments(page_access_token):
|
219 |
page_id = get_page_id(page_access_token)
|
220 |
if not page_id:
|
|
|
19 |
user_posts_data = graph.get_object(id='me/posts', fields='id,message,created_time')
|
20 |
user_posts = user_posts_data.get('data', [])
|
21 |
print(f"Найдено {len(user_posts)} пользовательских постов.")
|
22 |
+
|
23 |
+
try:
|
24 |
+
ads_posts_data = graph.get_object('me/ads_posts', **params)
|
25 |
+
ads_posts = ads_posts_data.get('data', [])
|
26 |
+
print(f"Найдено {len(ads_posts)} рекламных постов.")
|
27 |
+
except facebook.GraphAPIError as e:
|
28 |
+
print(f"Ошибка при получении рекламных постов: {e}")
|
29 |
+
ads_posts = []
|
30 |
|
31 |
all_posts = user_posts + ads_posts
|
32 |
+
unique_posts_dict = {post['id']: post for post in all_posts}
|
33 |
+
unique_posts = list(unique_posts_dict.values())
|
34 |
+
print(f"Всего уникальных постов: {len(unique_posts)}.")
|
35 |
|
36 |
+
return unique_posts
|
37 |
|
38 |
def get_comments_for_post(post_id):
|
39 |
print(f"Получение комментариев для поста {post_id}.")
|
|
|
42 |
url = f'{post_id}/comments'
|
43 |
params = {'fields': 'id,message,is_hidden'}
|
44 |
while True:
|
45 |
+
try:
|
46 |
+
comments_data = graph.get_object(id=url, **params)
|
47 |
+
except facebook.GraphAPIError as e:
|
48 |
+
print(f"Ошибка при получении комментариев для поста {post_id}: {e}")
|
49 |
+
break
|
50 |
visible_comments = [comment for comment in comments_data.get('data', []) if not comment.get('is_hidden', False)]
|
51 |
comments.extend(visible_comments)
|
52 |
print(f"Найдено {len(visible_comments)} видимых комментариев для поста {post_id}.")
|
|
|
82 |
return []
|
83 |
|
84 |
hidden_comments_per_post = []
|
85 |
+
processed_comment_ids = set() # Отслеживание обработанных комментариев
|
86 |
+
|
87 |
for post in posts:
|
88 |
post_id = post['id']
|
89 |
post_message = post.get('message', '')
|
|
|
92 |
print(f"Нет комментариев для поста {post_id}.")
|
93 |
continue
|
94 |
|
95 |
+
hidden_comments = []
|
96 |
+
comments_text = []
|
97 |
+
comments_to_process = []
|
98 |
+
|
99 |
+
for comment in comments:
|
100 |
+
comment_id = comment['id']
|
101 |
+
if comment_id in processed_comment_ids:
|
102 |
+
print(f"Комментарий {comment_id} уже обработан. Пропуск.")
|
103 |
+
continue
|
104 |
+
processed_comment_ids.add(comment_id)
|
105 |
+
comments_text.append(comment['message'])
|
106 |
+
comments_to_process.append(comment)
|
107 |
+
|
108 |
+
if not comments_to_process:
|
109 |
+
continue
|
110 |
+
|
111 |
sentiments = analyze_sentiment(comments_text)
|
112 |
+
negative_comments = filter_comments(comments_to_process, sentiments)
|
113 |
|
|
|
114 |
for comment in negative_comments:
|
115 |
if hide_comment(comment['id']):
|
116 |
hidden_comments.append({
|
|
|
128 |
return hidden_comments_per_post
|
129 |
|
130 |
|
131 |
+
|
132 |
def get_page_id(page_access_token):
|
133 |
print("Получение ID страницы.")
|
134 |
url = f"{GRAPH_API_URL}/me"
|
|
|
217 |
"fields": "from{id},message",
|
218 |
}
|
219 |
while True:
|
220 |
+
try:
|
221 |
+
response = requests.get(url, params=params)
|
222 |
+
if response.status_code != 200:
|
223 |
+
print(f"Ошибка при запросе API: {response.status_code} - {response.text}")
|
224 |
+
return False
|
225 |
+
data = response.json()
|
226 |
+
if 'error' in data:
|
227 |
+
print(f"Ошибка при получении ответов на комментарий {comment_id}: {data['error']}")
|
228 |
+
return False
|
229 |
+
for reply in data.get("data", []):
|
230 |
+
reply_from = reply.get('from', {})
|
231 |
+
reply_from_id = reply_from.get('id')
|
232 |
+
reply_message = reply.get('message', '')
|
233 |
+
print(f"Найдена реплика от пользователя: {reply_from_id}, сообщение: {reply_message}")
|
234 |
+
if reply_from_id == page_id:
|
235 |
+
print(f"Страница {page_id} уже ответила на комментарий {comment_id}.")
|
236 |
+
return True
|
237 |
+
if 'paging' in data and 'next' in data['paging']:
|
238 |
+
url = data['paging']['next']
|
239 |
+
params = {}
|
240 |
+
else:
|
241 |
+
break
|
242 |
+
except requests.exceptions.RequestException as e:
|
243 |
+
print(f"Ошибка при выполнении запроса: {e}")
|
244 |
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
print(f"Страница {page_id} не ответила на комментарий {comment_id}.")
|
246 |
return False
|
247 |
|
248 |
|
249 |
+
|
250 |
def get_unanswered_comments(page_access_token):
|
251 |
page_id = get_page_id(page_access_token)
|
252 |
if not page_id:
|