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

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


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

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

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽