@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);
  • Вопрос задан
  • 367 просмотров
Решения вопроса 1
@albertalexandrov
Вы сформировали url для get-запроса.
Вам надо так формировать запрос:

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


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

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

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

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