Skip to content

Instantly share code, notes, and snippets.

@nalgeon nalgeon/README.md
Last active Nov 25, 2019

Embed
What would you like to do?
Пример работы с подсказками DaData на PHP (через cUrl)

Подсказки на PHP

Для большинства PHP-приложений достаточно использовать jQuery-плагин. Он проще в подключении и красиво выглядит. Используйте прямую работу с API на PHP только в том случае, если вы твёрдо уверены, что jQuery-плагин не подходит.

<?php
class Dadata {
private $base_url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs";
private $token;
private $handle;
function __construct($token) {
$this->token = $token;
}
public function init() {
$this->handle = curl_init();
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->handle, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"Accept: application/json",
"Authorization: Token " . $this->token
));
curl_setopt($this->handle, CURLOPT_POST, 1);
}
/**
* See https://dadata.ru/api/outward/ for details.
*/
public function findById($type, $fields) {
$url = $this->base_url . "/findById/$type";
return $this->executeRequest($url, $fields);
}
/**
* See https://dadata.ru/api/geolocate/ for details.
*/
public function geolocate($lat, $lon, $count = 10, $radius_meters = 100) {
$url = $this->base_url . "/geolocate/address";
$fields = array(
"lat" => $lat,
"lon" => $lon,
"count" => $count,
"radius_meters" => $radius_meters
);
return $this->executeRequest($url, $fields);
}
/**
* See https://dadata.ru/api/iplocate/ for details.
*/
public function iplocate($ip) {
$url = $this->base_url . "/iplocate/address?ip=" . $ip;
return $this->executeRequest($url, $fields = null);
}
/**
* See https://dadata.ru/api/suggest/ for details.
*/
public function suggest($type, $fields) {
$url = $this->base_url . "/suggest/$type";
return $this->executeRequest($url, $fields);
}
public function close() {
curl_close($this->handle);
}
private function executeRequest($url, $fields) {
curl_setopt($this->handle, CURLOPT_URL, $url);
if ($fields != null) {
curl_setopt($this->handle, CURLOPT_POST, 1);
curl_setopt($this->handle, CURLOPT_POSTFIELDS, json_encode($fields));
} else {
curl_setopt($this->handle, CURLOPT_POST, 0);
}
$result = curl_exec($this->handle);
$result = json_decode($result, true);
return $result;
}
}
// Метод init() следует вызвать один раз в начале,
// затем можно сколько угодно раз вызывать suggest()
// и в конце следует один раз вызвать метод close().
//
// За счёт этого не создаются новые сетевые соединения на каждый запрос,
// а переиспользуется существующее.
$dadata = new Dadata("ВАШ_API_КЛЮЧ");
$dadata->init();
$fields = array("query"=>"7707083893", "count"=>5);
$result = $dadata->suggest("party", $fields);
print_r($result);
$fields = array("query"=>"77000000000283600", "count"=>1);
$result = $dadata->findById("address", $fields);
print_r($result);
$result = $dadata->iplocate("46.226.227.20");
print_r($result);
$result = $dadata->geolocate(55.878, 37.653);
print_r($result);
$dadata->close();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.