2013-03-14 4 views
4

Я пытаюсь использовать Disqus API для добавления сообщения в существующий форум/форум. В документации я могу прочитать, что я могу отправить комментарий без аутентификации в качестве гостя. документация говорит, что это: http://disqus.com/api/docs/posts/create/Disqus API: создать комментарий в качестве гостя

Анонимные комментарии допускаются при двух условиях:

  1. Вы устаревших версий AUTH, и ваш секретный ключ
  2. Вы используете свой открытый ключ, вы пришли из проверенного реферера, вы неаутентифицированы, и форум, на котором вы пытаетесь создать сообщение, указан в доверенных форумах приложений.

Чтобы создать анонимный комментарий, просто передайте author_email и author_name и, при желании, параметр author_url.

Поэтому я использую этот код для создания комментария в PHP. (Я использую очень простой класс Curl, но проблема не там, потому что я получаю то же самое один в консоли на disqus.com/api)

$curl = new Curl(1); 

$curl->addPostVar('thread','THREAD_ID'); 
$curl->addPostVar('message','Text message'); 
$curl->addPostVar('author_email','My email'); 
$curl->addPostVar('author_name','My name'); 
$curl->addPostVar('api_secret','My application secret API key'); 

echo $curl->exec('https://disqus.com/api/3.0/posts/create.json'); 

Но я получаю сообщение об ошибке с помощью JSON

{"code": 4, "response": "You must be authenticated to perform this action"} 

Я знаю, что кто-то еще спросил об этом (Disqus API create post error), но ответ предложил использовать OAuth и пройти аутентификацию. Но я не хочу аутентифицироваться, я хочу отправить комментарий для гостей с именем и электронной почтой. Где я ошибаюсь?

Большое спасибо за любые ответы.

ответ

2

Чтобы комментировать анонимно, вы бы не пропустить любые токены доступа. Тем не менее, вы должны убедиться, что выполняются следующие условия:

  1. В настройках сайта, в разделе Общие, убедитесь, что «Разрешить комментарии гостей» проверяется
  2. В настройках сайта Disqus, на вкладке Дополнительно добавьте свой домен (имена) в качестве доверенных доменов
  3. В настройках приложения API добавьте те же домены из доверенных доменов в список доверенных доменов API-приложения
  4. Когда вы делаете запрос API для публикации комментария, убедитесь, что ваш Заголовок «referer» имел домен, который находится в одном из этих доверенных доменов, и установите заголовок «host» на «.disqus.com» для хорошего измерения
  5. Сделать запрос API с помощью открытого ключа

Я был в состоянии сделать запрос успешно следуя этим правилам.

Просто, чтобы прояснить ситуацию, вам нужно будет владеть/умерить сайт, чтобы отправлять анонимные комментарии через API. Также убедитесь, что вы передали дополнительный аргумент strict=1, когда вы это делаете. По умолчанию любые необязательные аргументы, которые ошибка просто удаляется, поэтому вы можете потенциально столкнуться с ситуацией, когда комментарии публикуются как сами, если author_name и author_email выдают ошибку.

+0

Большое спасибо за ответ. Я добавил параметр access_token (как я пробовал вчера), но теперь я получаю сообщение об ошибке «Вы не можете указывать какие-либо из [author_name, author_email, author_url] в качестве аутентифицированного пользователя», потому что правильно с помощью access_token я аутентифицируюсь как пользователь Disqus. Как я могу решить сейчас? –

+0

Я буду ждать ответа :) –

+0

Является ли токен доступа тем, который связан с вашим API-приложением, и делает ли пользовательское имя умеренным сайтом, на который вы отправляете? Оба этих условия должны быть правильными, чтобы опубликовать комментарий в качестве гостя. –

2

После проверки очевидных вещей (например, позволяя гостевой проводки и проверки моих ссылающихся доменов в форуме и настройки приложений), я, наконец, смог решить эту проблему с помощью disqus-php библиотеки:

require __DIR__ . '/disqus-php-master/disqusapi/disqusapi.php'; 

$disqus = new DisqusAPI($secret_key); 

print_r($disqus->posts->create(array(
    'thread' => $thread_id, 
    'message' => $message, 
    'author_name' => $author_name, 
    'author_email' => $author_email, 
    'api_key' => $api_key, 
))); 

Улов является то, что api_key - это не то же самое, что и открытый ключ, указанный в настройках вашего приложения Disqus. Я на самом деле должен был инспектировать один из AJAX вызовов из виджета Disqus Javascript, чтобы получить правильный api_key:

Disqus AJAX call headers showing the api_key

+1

Вы правы. Кажется, это ошибка! – amleczko

+1

Я получаю тот же ключ API. Это заставляет меня думать, что это решение просто контактирует с встраиваемым виджетами. Я заметил, что после использования этого ключа API и выполнения вызовов статистика использования моего приложения не изменяется. На данный момент я бы назвал это обходным путем. Однако никаких претензий здесь нет. Я вытаскиваю волосы. –

+1

Это очень хорошо, вы бы подумали, что они обратятся к нему к настоящему времени. –

1

Я открываю эту тему снова, потому что у меня есть один и тот же вопрос, и это не кажется, там нет ответа на него все же.

Я пробовал в течение нескольких дней, чтобы прокомментировать API в качестве гостя. Если я прочитал документацию по API, скажу, что мне нужно передать сообщение, author_name, author_url, thread и api_key, чтобы сделать это, но не могу этого сделать. Я всегда получает

"Code: 12" 

и

"This application cannot create posts on the chosen forum". 

Если я посылаю через access_token для его работы, но тогда она будет размещена, как я и то не хочу.

Я также нашел Disqus recipes на Github и в файле ридми в разделе Beginner это относится к сниппета

«Создать гостевую комментарий: /php/create-guest-comment.php»

, но не можете найти фрагмент. Поэтому я просматриваю коммиты и нахожу "Delete obsolete guest comment creation script". Должен ли я воспринимать это как намек на то, что Disqus на данный момент не может создавать комментарии в качестве гостя через API? Если так, Disqus может обновить вашу документацию.

Если я делаю что-то неправильно, я был бы признателен, если вы укажете меня в правильном направлении.

Смежные вопросы