Я пытаюсь запустить скрипт, который входит в Instagram и загружает 10 изображений со случайным текстом, который был сгенерирован. Однако вот вывод, который я получаю, когда пытаюсь запустить скрипт:
2023-01-02 21:56:48,608 - INFO - Instabot version: 0.117.0 Started
Which account do you want to use? (Type number)
1: ACCOUNTNAME
0: add another account.
-1: delete all accounts.
1
2023-01-02 21:56:51,371 - INFO - Not yet logged in starting: PRE-LOGIN FLOW!
2023-01-02 21:56:51,573 - ERROR - Request returns 429 error!
2023-01-02 21:56:51,573 - WARNING - That means 'too many requests'. I'll go to sleep for 5
minutes.
Как я могу решить эту проблему?
Вот код, который я использую:
import random
import requests
from PIL import Image, ImageDraw, ImageFont
import time
import instabot
# Generate 10 random images
for i in range(10):
# Create a black image
image = Image.new('RGB', (500, 500), (0, 0, 0))
draw = ImageDraw.Draw(image)
# Generate a random string of white text
text = ''.join([
random.choice(
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};:\'",.<>/?')
for i in range(10)
])
# Use a default font with a larger size
font = ImageFont.truetype('cour.ttf', 72)
# Randomly position each letter on the image
x = 0
y = 0
for letter in text:
draw.text((x, y), letter, (255, 255, 255), font=font)
x += random.randint(30, 50)
y += random.randint(-10, 10)
# Save the image and create a corresponding text file
image.save(f'generated-images/image{i}.jpg')
with open(f'generated-images/image{i}.txt', 'w') as f:
f.write(text)
try:
# Create an Instabot instance
bot = instabot.Bot()
# Login to Instagram
bot.login()
# For each image and corresponding text file
for i in range(10):
# Open the text file
with open(f'generated-images/image{i}.txt', 'r') as f:
# Use the text from the file as the caption
caption = f.read()
# Post the image and use the text from the file as the caption
bot.upload_photo(f'generated-images/image{i}.jpg', caption=caption)
# Add a delay between requests
time.sleep(200)
except:
print('Error')
finally:
bot.logout()
print('logging out')
# Log out of Instagram
bot.logout()
Он успешно вошел в мою учетную запись без ошибок, но когда он пытается опубликовать изображения, он выдает «ошибка 429» ...
Является ли time.sleep(200) быстрым??!
@MattDMo Так 200 слишком быстро? если да, если я поменяю его на что-то большее, это сработает, или я на какое-то время попаду в черный список?
Я попытался изменить задержку на большее число, но я продолжаю получать ту же ошибку. @MattDMo
@OrbitalMartian Зависит от того, сколько запросов вы отправляете. Ограничение скорости Instagram составляет 200 запросов в час, хотя неясно, как они его обеспечивают. На самом деле они могут применять его как 200 запросов в час, но они также могут применять его как 3 запроса в минуту. В любом случае, если вы не хотите переходить на бизнес-аккаунт, решение, скорее всего, будет заключаться в том, чтобы просто замедлить его, пока он не перестанет жаловаться.
@Jesse На самом деле у меня есть бизнес-аккаунт в Instagram, и я делаю для него автоматическую публикацию только 10 изображений со случайным текстом (это был просто пример, чтобы увидеть, работает ли это), а описание берется из текстового файла, в котором есть символы в изображение, которое было создано. и он публикует их только каждые 200 секунд. Я не уверен, что происходит, может быть, это инстабот или что.
@OrbitalMartian Возможно, проблема в библиотеке. Это может даже не быть проблемой, возможно, вызов просто выполняет больше запросов, чем вы знаете. Если нет, скорее всего, Instagram придется работать с вами над этой проблемой.
@Jesse Хм, есть ли способ регистрировать каждый раз, когда запрос отправляется в instagram, чтобы я мог отлаживать, что отправляет эти запросы?
@OrbitalMartian Я не знаком с библиотекой instabot (или с Python вообще), поэтому я не уверен, что она позволяет увеличить уровень журнала. Один из способов, которым я делал подобные вещи в прошлом, — это просто подтягивание Wireshark и фильтрация по HTTP-запросам.
@Джесси ах! это нормально без проблем! я хочу поблагодарить вас за вашу помощь в любом случае
@Jesse Я импортировал модуль ведения журнала, и вот мой вывод: DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): i.instagram.com:443 DEBUG:urllib3.connectionpool:https://i.instagram.com:443 "POST /api/v1/accounts/get_prefill_candidates/ HTTP/1.1" 429 77 DEBUG:instabot version: 0.117.0:POST to endpoint: accounts/get_prefill_candidates/ returned response: <Response [429]> DEBUG:instabot version: 0.117.0:Responsecode indicates error; response content: b'{"message":"Please wait a few minutes before you try again.","status":"fail"}'
@OrbitalMartian Тогда да, это похоже на то, о чем вам, вероятно, придется поговорить со службой поддержки Instagram. С вашей стороны мало что можно сделать, если сервер не принимает ваши запросы.
@ Джесси, ну, это облом ... жаль, что не было другого пути
Исправлено путем добавления задержки, а затем ожидания до следующего дня, потому что при первом запуске кода я, по-видимому, отправил слишком много запросов за день.
Это означает, что вы отправили слишком много запросов за слишком короткое время, как и написано. Отправляйте запросы медленнее.