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

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


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

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

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

Войти через TM ID
Похожие вопросы
от 200 000 до 250 000 руб.
ICONIC Москва
от 160 000 до 210 000 руб.
16 янв. 2019, в 14:53
20000 руб./за проект
16 янв. 2019, в 14:52
3000 руб./за проект
16 янв. 2019, в 14:11
5000 руб./за проект