Masik
@Masik
Программирую понемногу

Пример работы с API?

Здравствуйте.


У меня никак не получается разместить запись у себя в дневнике с помощью api.


Отправляю GET запрос на api-yaru.yandex.ru/person/{uid}/post/, получаю информацию.


Но если пытаюсь добавить запись api-yaru.yandex.ru/person/{uid}/post/?oauth_token={token}&format=json&title=Title&content=Content, то получаю 403 ошибку FORBIDDEN (Required permission: «yaru:read»). Права на размещение постов у приложения выставил. Пробовал посылать запросы через JavaScript, PHP, PhpStorm


Мог ли бы привести рабочий пример, желательно на php, для размещения сообщений в дневнике или направить где можно покопаться?


PS

Попытки на PHP:
Способ 1
public function post_on_wall($title, $message, $user_id){
        $token = json_decode(Tokens::get_token($user_id));

        $url = "https://api-yaru.yandex.ru/person/{$user_id}/post/";

        $data = array(
            'oauth_token' => $token->oauth_token,
            'format' => 'json',
            'title' => $title,
            'content' => $message
        );

        $options = array(
            'http' => array(
                'header'  => "Content-type: application/x-yaru-atom+json; type=entry\r\n",
                'method'  => 'POST',
                'content' => http_build_query($data),
            ),
        );
        $context  = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        var_dum($result);
}


ошибка 401: UNAUTHORIZED

Способ 2
public function post_on_wall($title, $message, $user_id){
        $token = json_decode(Tokens::get_token($user_id));

        $data = array(
            'oauth_token' => $token->oauth_token,
            'format' => $token->format,
            'title' => $title,
            'content' => $message
        );

        $url = "https://api-yaru.yandex.ru/person/{$user_id}/post/";

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url.'?'.urldecode(http_build_query($data)));
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode(http_build_query($data)));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $result = curl_exec($curl);
        curl_close($curl);
        var_dump($result);
}


Тут вообще NULL

На JS
$(document).ready(function(){
    $.ajax({
        dataType: 'jsonp',
        type: 'POST',
        data: {'oauth_token': '{token}', 'format': 'json', 'title': 'Title', 'content': 'Content'},
        url: 'https://api-yaru.yandex.ru/person/{user_id}/post/',
        success: function(r) {console.dir(r);},
        error: function(e) {console.log(e);}
    });
});


403: FORBIDDEN
  • Вопрос задан
  • 15476 просмотров
Пригласить эксперта
Ответы на вопрос 2
Grigorieff
@Grigorieff
api-yaru.yandex.ru/person/{uid}/post/?oauth_token={token}&format=json&title=Title&content=Content

Вы прямо сюда отправляете запрос? Если да, то эти параметры придут в виде GET: $_GET['oauth_token']; и т д, а вам эти параметры надо отправить постом на api-yaru.yandex.ru/person/{uid}/post/?format=json, т е как то так:

$post_data = array(
'oauth_token' => 'oauth_token',
'title' => 'title',
'content' => 'content'
);

$result = post_request('api-yaru.yandex.ru/person/{uid}/post/?format=json', $post_data);

if ($result['status'] == 'ok'){

// Print headers 
echo $result['header']; 

echo '<hr />';

// print the result of the whole request:
echo $result['content'];

}
else {
    echo 'A error occured: ' . $result['error']; 
}
Ответ написан
DanyBoo
@DanyBoo
https://saity74.ru
Привет у меня вот такой код стал, работать пробовал по разному были проблемы с русским языком, из всех способов работал только такой
Тут кусок из класса для работы с Ярушкой весь преводить не стал, если есть более конкретные вопросы постараюсь ответить!
protected function _request()
	{
		
	 	$params = array(
	 		'http' => array(
			'method' 	=> $this->method,
	        	'header'  	=>	sprintf("Authorization: OAuth %s\r\n", $this->token).
							sprintf("Content-Type: %s\r\n", $this->contentType),
	       		 'content' 	=> $this->content
	    	)
	    );
		
		$ctx = stream_context_create($params);
		
		$fp = fopen($this->url, 'r', false, $ctx);

		if (!$fp) {
	    	throw new Exception("Problem with $this->url, $php_errormsg");
		}

		$response = @stream_get_contents($fp);
		
		if ($response === false) {
		    throw new Exception("Problem reading data from $this->url, $php_errormsg");
		}

		return $response;
	}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы