<?php
//ID аккаунта на banbase.ru
define('BANBASE_ID', 1);
//ID сайта, добавленного в banbase.ru
define('BANBASE_SITE', 3);
//API KEY от banbase.ru
define('BANBASE_API_KEY', '1D87E04062AFEDB066F4EF924DE949B4');
//Сервер базы
define('BANBASE_SERVER', 'http://banbase.ru/api');
class Banbase {
//Поиск по строке
static function search($str, $page = 1) {
$str = urlencode($str);
$page = (int) $page;
$content = self::http(BANBASE_SERVER . '/' . $str . '?serialize&p=' . $page);
$arr = unserialize($content);
return $arr;
}
//Поиск по параметрам
static function search_arr($search_arr) {
$str = '';
foreach ($search_arr AS $key => $val) {
$str.= $key . '=' . urlencode($val) . '&';
}
$res = unserialize(@file_get_contents(BANBASE_SERVER . '/search/?serialize&' . $str));
return $res['answer'];
}
//Добавление записи в базу
//Необходим curl, и аккаунт на сервере базы
//info_arr
//wnid, icq, email, skype, url, descr, name
static function add($info_arr) {
$info_arr['id'] = BANBASE_ID;
$info_arr['api_key'] = BANBASE_API_KEY;
$info_arr['site'] = BANBASE_SITE;
$content = self::http(BANBASE_SERVER . '/add/?serialize', Array(), $info_arr);
$arr = unserialize($content);
return $arr;
}
//Запрос по http
static function http($url, $headers = Array(), $post_array = Array()) {
//if (!function_exists('curl_init')) {
return file_get_contents($url);
//}
$head = Array();
if (is_array($headers)) {
foreach ($headers AS $key => $val) {
$head[] = $key . ': ' . $val;
}
}
$post = '';
if ($post_array) {
$c = count($post_array);
$i = 0;
foreach ($post_array AS $key => $val) {
$i++;
$post.= $key . '=' . $val;
if ($i <> $c) {
$post .= '&';
}
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'curl_pb_callback'); //Функция для ограничения трафика по размеру
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
if ($post) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)');
if ($head){
curl_setopt($ch, CURLOPT_HTTPHEADER, $head); //Заголовки
}
//curl_setopt($ch, CURLOPT_HEADER, true); // для включения заголовков в вывод.
//curl_setopt($ch, CURLOPT_NOBODY, true); // для исключения тела ответа из вывода. Метод запроса устанавливается в HEAD.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //Количество секунд ожидания при попытке соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 5); //Максимально позволенное количество секунд для выполнения cURL-функций.
//curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$result = curl_exec($ch);
//print_r(curl_getinfo ($ch ,CURLINFO_HEADER_OUT));
//Возвращаем false, устанавливаем сообщение об ошибке----
$err = curl_error($ch);
if ($err) {
$result = Array();
$result['error'] = $err;
return serialize($result);
}
//-------------------------------------------------------
curl_close($ch);
return $result;
}
}
//call back функция для curl, ограничивает размер скачиваемого файла
function curl_pb_callback($download_size, $downloaded, $upload_size, $uploaded) {
global $ch;
static $summ;
if (!isset($summ)) {
$summ = 0;
}
$summ+=$downloaded;
if ($summ > 500 * 1024) {
throw new Exception('Too long content');
}
return false;
}