Загрузка в группу VK картинки python
Проблема: не могу сформировать корректные данные для прикрепление фото (параметр attachments).
Vk api обновилась и теперь нельзя использовать api версии (3.0) до этого можно было использовать id(индикатор фотографии)
<type><owner_id>_<media_id>
def upload(self, url, count, public_page, public_page_post, signed, messages=''):
"""!
@brief Upload content in VK
@brief Загружает контент в VK
@param [in] str url // patch to file
@param [in] str count // timer post
@param [in] str public_page //destination address
@param [in] str public_page_post // destination address (negative for group)
@param [in] str signed // signed or no
@param [in] str messages // attach string messages
"""
token = "___токен______"
session = vk.Session(
access_token = '___токен______')
vk.api.access_token = token
api = vk.API(session, v='5.7', lang='ru', timeout=10)
result = api.photos.getWallUploadServer(group_id=public_page)
print(result)
upload_url = result['upload_url']
try:
img = {'photo': ('img32.jpg', open(url, 'rb'))}
response = requests.post(upload_url, files=img)
# print("Response.text", response.text)
print("Load post in grops")
result = json.loads(response.text)
print(result)
attach = api.photos.saveWallPhoto(photo=result['photo'],
hash=result['hash'],
server=result['server'],
group_id=public_page)
print(attach)
Temp = attach[0]['id']
wait = 60 * 60
vol = wait * count
times = (time.time() + vol)
time.sleep(3)
# print("Times: ", times)
var_times = datetime.datetime.today() + datetime.timedelta(hours=count)
var_times = var_times - datetime.timedelta(minutes=var_times.minute)
# print(var_times.strftime("%A, %d. %B %Y %I:%M%p"))
# print("Messages %s", messages)
if signed is True:
signed = 1
else:
# 0 — подписи добавлено не будет
signed = 0
if count != 0:
api.wall.post(from_group=1,
owner_id=public_page_post,
attachments=Temp,
signed=signed,
publish_date=int(time.mktime(var_times.timetuple())),
message=messages)
else:
api.wall.post(from_group=1,
owner_id=public_page_post,
attachments=Temp,
signed=signed,
message=messages
)
# count += 1
except Exception as e:
print(e)
return
Ответы (1 шт):
Автор решения: Антон Горыня
→ Ссылка
После того как получил адрес сервера, и загрузил фото на сервер. можешь использовать данную функцию для загрузки
def post_photo(media_id, owner_id, img_description, vk_token, vk_group_id, api_version, publish_date=''):
params = {
'access_token': vk_token,
'v': api_version,
'owner_id': f'-{vk_group_id}',
'from_group': 1,
'message': img_description,
'attachments': f'photo{owner_id}_{media_id}',
'publish_date': publish_date
}
response = requests.post(
VK_API_URL.format(metod='wall.post'),
params=params
)
response.raise_for_status()
response = response.json()
check_vk_response(response)
return response