@henre1989

Как сделать размещение постов большого объема в одноклассниках по API?

Есть рабочий скрипт для постинга, работает с небольшими по объему текста постами.
mydict='{ "media": [ { "type": "text", "text": "'+text_post+'" }, { "type": "photo", "list": ['+pic_LIST+']}], "publishAtMs": "'+date+'", "onBehalfOfGroup": "true"}'
p1='application_key='+key+'attachment='+mydict+'format=jsongid='+id_gr+'method=mediatopic.posttype='+self.type_post+session
h=hashlib.md5(p1.encode("UTF-8"))
sig=h.hexdigest()
att = urllib.parse.quote(mydict, safe='utf-8')

#Загрузка поста
url='https://api.ok.ru/fb.do?application_key='+key+'&attachment='+str(att)+'&format=json&gid='+id_gr+'&method=mediatopic.post&type='+self.type_post+'&sig='+sig+'&access_token='+access_token
       
r = requests.post(url)
print(r.text)


после перевода
att = urllib.parse.quote(mydict, safe='utf-8')
получается огромная ссылка, которая отправляется на сервер и мне приходит ответ "414 Request-URI Too Large"
Не знаю как это победить, читал что можно использовать post запрос, но результат тот же
ссылка на метод в ок https://apiok.ru/dev/methods/rest/mediatopic/media...

Делаю пост запрос с параметрами в запросе

mydict='{ "media": [ { "type": "text", "text": "'+text+'" }, { "type": "photo", "list": [{ "id":"'+pic_tokken+'"}]}], "publishAtMs": "'+date+'", "onBehalfOfGroup": "true"}'

att = urllib.parse.quote(mydict, safe='utf-8')
        
p1={'application_key': app_key,
                    'attachment':mydict,
                    'format':'json',
                    'gid':id_gr,
                    'method':'mediatopic.post',
                    'type':post_type2
                    }
h=hashlib.md5(str(p1).encode('utf-8')+'{token}{secret}'.format(token=access_token,secret=privat_key).encode('utf-8'))
sig=h.hexdigest()
print(sig)
        
r = requests.post('https://api.ok.ru/fb.do', params={'application_key':app_key, 'attachment':str(att), 'format':'json', 'gid':id_gr, 'method':'mediatopic.post', 'type':post_type2}, data={'access_token': access_token, 'sig':sig})

теперь проблема в том что проверка md5 не сходится
Сделал по аналогии кода на php
$params = array(
    "application_key"   =>  $ok_public_key,
    "method"            =>  "mediatopic.post",
    "gid"               =>  $ok_group_id,
    "type"              =>  "GROUP_THEME",
    "attachment"        =>  $attachment,
    "format"            =>  "json",
);

// Подпишем
$sig = md5( arInStr($params) . md5("{$ok_access_token}{$ok_private_key}") );

$params['access_token'] = $ok_access_token;
$params['sig']          = $sig;

$step3 = json_decode( getUrl("https://api.ok.ru/fb.do", "POST", $params, 30, false, false ), true);
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
@albertalexandrov
Вы сформировали url для get-запроса.
Вам надо так формировать запрос:

r = requests.post('https://api.ok.ru/fb.do', data={'application_key': key, и тд})


где в словаре data будут лежать параметры запроса.

Ну или поменять requests.post(url) на requests.get(url)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы