Uniaff commited on
Commit
f9c1865
·
verified ·
1 Parent(s): 7c603fe

Create func_facebook

Browse files
Files changed (1) hide show
  1. func_facebook +208 -0
func_facebook ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import facebook
2
+ import requests
3
+
4
+ from func_ai import analyze_sentiment
5
+
6
+ GRAPH_API_URL = 'https://graph.facebook.com/v20.0'
7
+
8
+
9
+ def hide_negative_comments(token):
10
+ def init_facebook_client(token):
11
+ return facebook.GraphAPI(access_token=token)
12
+
13
+ def get_facebook_posts():
14
+ graph = init_facebook_client(token)
15
+ posts_data = graph.get_object(id='me/posts', fields='id,message,created_time')
16
+ return posts_data.get('data', [])
17
+
18
+ def get_comments_for_all_posts(posts):
19
+ all_comments = []
20
+ graph = init_facebook_client(token)
21
+ for post in posts:
22
+ comments_data = graph.get_object(id=f'{post["id"]}/comments', fields='message,created_time,id,is_hidden')
23
+ visible_comments = [comment for comment in comments_data.get('data', []) if
24
+ not comment.get('is_hidden', False)]
25
+ all_comments.extend(visible_comments)
26
+ return all_comments
27
+
28
+ def filter_comments(comments, sentiments):
29
+ print("Фильтруем негативные комментарии.")
30
+ negative_comments = []
31
+ for comment, sentiment in zip(comments, sentiments):
32
+ if sentiment['label'].lower() == 'negative':
33
+ print(f"Найден негативный комментарий: {comment['message']}")
34
+ negative_comments.append(comment)
35
+ return negative_comments
36
+
37
+ def hide_comment(comment_id):
38
+ graph = init_facebook_client(token)
39
+ try:
40
+ graph.request(f'{comment_id}', post_args={'is_hidden': True}, method='POST')
41
+ return True
42
+ except facebook.GraphAPIError as e:
43
+ print(f"Ошибка при скрытии комментария {comment_id}: {e}")
44
+ return False
45
+
46
+ posts = get_facebook_posts()
47
+ if not posts:
48
+ print("Нет постов для обработки.")
49
+ return []
50
+
51
+ comments = get_comments_for_all_posts(posts)
52
+ if not comments:
53
+ print("Нет комментариев для обработки.")
54
+ return []
55
+
56
+ comments_text = [comment['message'] for comment in comments]
57
+ sentiments = analyze_sentiment(comments_text)
58
+ negative_comments = filter_comments(comments, sentiments)
59
+
60
+ hidden_comments = []
61
+ for comment in negative_comments:
62
+ if hide_comment(comment['id']):
63
+ hidden_comments.append({
64
+ 'id': comment['id'],
65
+ 'message': comment['message']
66
+ })
67
+
68
+ return hidden_comments
69
+
70
+
71
+ def get_facebook_comments(post_id, ACCESS_TOKEN):
72
+ print(f"Получаем комментарии для поста: {post_id}")
73
+ url = f"{GRAPH_API_URL}/{post_id}/comments"
74
+ params = {
75
+ 'access_token': ACCESS_TOKEN,
76
+ 'filter': 'stream'
77
+ }
78
+ response = requests.get(url, params=params)
79
+ if response.status_code == 200:
80
+ print("Комментарии успешно получены.")
81
+ return response.json().get('data', [])
82
+ else:
83
+ print(f"Ошибка при получении комментариев: {response.text}")
84
+ return []
85
+
86
+
87
+ def get_page_id(page_access_token):
88
+ url = f"{GRAPH_API_URL}/me"
89
+ params = {
90
+ "access_token": page_access_token,
91
+ "fields": "id,name"
92
+ }
93
+ response = requests.get(url, params=params)
94
+ data = response.json()
95
+ if 'error' in data:
96
+ print(f"Ошибка при получении ID страницы: {data['error']}")
97
+ return None
98
+ return data.get("id")
99
+
100
+
101
+ def get_posts(page_id, page_access_token):
102
+ url = f"{GRAPH_API_URL}/{page_id}/posts"
103
+ params = {
104
+ "access_token": page_access_token,
105
+ "fields": "id"
106
+ # Максимальное количество постов за запрос
107
+ }
108
+ posts = []
109
+ while True:
110
+ response = requests.get(url, params=params)
111
+ data = response.json()
112
+ if 'error' in data:
113
+ print(f"Ошибка при получении постов: {data['error']}")
114
+ break
115
+ posts.extend(data.get("data", []))
116
+ if 'paging' in data and 'next' in data['paging']:
117
+ url = data['paging']['next']
118
+ params = {} # Следующие запросы уже содержат все параметры в URL
119
+ else:
120
+ break
121
+ return posts
122
+
123
+
124
+ def get_comments(post_id, page_access_token):
125
+ url = f"{GRAPH_API_URL}/{post_id}/comments"
126
+ params = {
127
+ "access_token": page_access_token,
128
+ "fields": "id,from,message,is_hidden",
129
+
130
+ }
131
+ comments = []
132
+ while True:
133
+ response = requests.get(url, params=params)
134
+ data = response.json()
135
+ if 'error' in data:
136
+ print(f"Ошибка при получении комментариев к посту {post_id}: {data['error']}")
137
+ break
138
+ comments.extend(data.get("data", []))
139
+ if 'paging' in data and 'next' in data['paging']:
140
+ url = data['paging']['next']
141
+ params = {} # Следующие запросы уже содержат все параметры в URL
142
+ else:
143
+ break
144
+ return comments
145
+
146
+
147
+ def has_page_replied(comment_id, page_id, page_access_token):
148
+ url = f"{GRAPH_API_URL}/{comment_id}/comments"
149
+ params = {
150
+ "access_token": page_access_token,
151
+ "fields": "from{id}",
152
+
153
+ }
154
+ while True:
155
+ response = requests.get(url, params=params)
156
+ data = response.json()
157
+ if 'error' in data:
158
+ print(f"Ошибка при получении ответов на комментарий {comment_id}: {data['error']}")
159
+ return False
160
+ for reply in data.get("data", []):
161
+ if reply['from']['id'] == page_id:
162
+ return True
163
+ if 'paging' in data and 'next' in data['paging']:
164
+ url = data['paging']['next']
165
+ params = {}
166
+ else:
167
+ break
168
+ return False
169
+
170
+
171
+ def get_unanswered_comments(page_access_token):
172
+ page_id = get_page_id(page_access_token)
173
+ if not page_id:
174
+ return []
175
+
176
+ print(f"ID Страницы: {page_id}")
177
+ posts = get_posts(page_id, page_access_token)
178
+ unanswered_comments = []
179
+
180
+ for post in posts:
181
+ post_id = post['id']
182
+ print(f"Обработка поста: {post_id}")
183
+ comments = get_comments(post_id, page_access_token)
184
+
185
+ for comment in comments:
186
+ if comment.get('is_hidden', False):
187
+ continue
188
+ comment_id = comment['id']
189
+ print(f"Проверка комментария: {comment_id}")
190
+ if not has_page_replied(comment_id, page_id, page_access_token):
191
+ unanswered_comments.append(comment)
192
+
193
+ return unanswered_comments
194
+
195
+
196
+ def reply_comment(comment_id, message, token):
197
+ url = f"{GRAPH_API_URL}/{comment_id}/comments"
198
+ params = {
199
+ 'access_token': token,
200
+ 'message': message
201
+ }
202
+ response = requests.post(url, params=params)
203
+ if response.status_code == 200:
204
+ print(f"Ответ успешно отправлен на комментарий {comment_id}.")
205
+ return True
206
+ else:
207
+ print(f"Ошибка при отправке ответа: {response.text}")
208
+ return False