Uniaff commited on
Commit
1a3047f
·
verified ·
1 Parent(s): babc799

Update func_facebook.py

Browse files
Files changed (1) hide show
  1. 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
- ads_posts_data = graph.get_object('me/ads_posts', **params)
24
- ads_posts = ads_posts_data.get('data', [])
25
- print(f"Найдено {len(ads_posts)} рекламных постов.")
 
 
 
 
26
 
27
  all_posts = user_posts + ads_posts
28
- print(f"Всего постов: {len(all_posts)}.")
 
 
29
 
30
- return all_posts
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
- comments_data = graph.get_object(id=url, **params)
 
 
 
 
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
- comments_text = [comment['message'] for comment in comments]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  sentiments = analyze_sentiment(comments_text)
85
- negative_comments = filter_comments(comments, sentiments)
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
- response = requests.get(url, params=params)
194
- if response.status_code != 200:
195
- print(f"Ошибка при запросе API: {response.status_code} - {response.text}")
196
- return False
197
- data = response.json()
198
- if 'error' in data:
199
- print(f"Ошибка при получении ответов на комментарий {comment_id}: {data['error']}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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: