Просмотр файла engine/classes/Banbase.php

Размер файла: 4.58Kb
  1. <?php
  2.  
  3. //ID аккаунта на banbase.ru
  4. define('BANBASE_ID', 1);
  5. //ID сайта, добавленного в banbase.ru
  6. define('BANBASE_SITE', 3);
  7. //API KEY от banbase.ru
  8. define('BANBASE_API_KEY', '1D87E04062AFEDB066F4EF924DE949B4');
  9. //Сервер базы
  10. define('BANBASE_SERVER', 'http://banbase.ru/api');
  11.  
  12. class Banbase {
  13.  
  14. //Поиск по строке
  15. static function search($str, $page = 1) {
  16. $str = urlencode($str);
  17. $page = (int) $page;
  18. $content = self::http(BANBASE_SERVER . '/' . $str . '?serialize&p=' . $page);
  19. $arr = unserialize($content);
  20. return $arr;
  21. }
  22.  
  23. //Поиск по параметрам
  24. static function search_arr($search_arr) {
  25. $str = '';
  26. foreach ($search_arr AS $key => $val) {
  27. $str.= $key . '=' . urlencode($val) . '&';
  28. }
  29. $res = unserialize(@file_get_contents(BANBASE_SERVER . '/search/?serialize&' . $str));
  30. return $res['answer'];
  31. }
  32.  
  33. //Добавление записи в базу
  34. //Необходим curl, и аккаунт на сервере базы
  35. //info_arr
  36. //wnid, icq, email, skype, url, descr, name
  37. static function add($info_arr) {
  38. $info_arr['id'] = BANBASE_ID;
  39. $info_arr['api_key'] = BANBASE_API_KEY;
  40. $info_arr['site'] = BANBASE_SITE;
  41. $content = self::http(BANBASE_SERVER . '/add/?serialize', Array(), $info_arr);
  42. $arr = unserialize($content);
  43. return $arr;
  44. }
  45.  
  46. //Запрос по http
  47. static function http($url, $headers = Array(), $post_array = Array()) {
  48. //if (!function_exists('curl_init')) {
  49. return file_get_contents($url);
  50. //}
  51.  
  52. $head = Array();
  53. if (is_array($headers)) {
  54. foreach ($headers AS $key => $val) {
  55. $head[] = $key . ': ' . $val;
  56. }
  57. }
  58.  
  59. $post = '';
  60. if ($post_array) {
  61. $c = count($post_array);
  62. $i = 0;
  63. foreach ($post_array AS $key => $val) {
  64. $i++;
  65. $post.= $key . '=' . $val;
  66. if ($i <> $c) {
  67. $post .= '&';
  68. }
  69. }
  70. }
  71.  
  72.  
  73. $ch = curl_init();
  74. curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'curl_pb_callback'); //Функция для ограничения трафика по размеру
  75. curl_setopt($ch, CURLOPT_NOPROGRESS, false);
  76.  
  77. if ($post) {
  78. curl_setopt($ch, CURLOPT_POST, true);
  79. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  80. }
  81.  
  82. curl_setopt($ch, CURLOPT_URL, $url);
  83. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)');
  84.  
  85. if ($head){
  86. curl_setopt($ch, CURLOPT_HTTPHEADER, $head); //Заголовки
  87. }
  88.  
  89.  
  90.  
  91. //curl_setopt($ch, CURLOPT_HEADER, true); // для включения заголовков в вывод.
  92. //curl_setopt($ch, CURLOPT_NOBODY, true); // для исключения тела ответа из вывода. Метод запроса устанавливается в HEAD.
  93. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  94. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //Количество секунд ожидания при попытке соединения
  95. curl_setopt($ch, CURLOPT_TIMEOUT, 5); //Максимально позволенное количество секунд для выполнения cURL-функций.
  96. //curl_setopt($ch, CURLINFO_HEADER_OUT, true);
  97.  
  98. $result = curl_exec($ch);
  99.  
  100. //print_r(curl_getinfo ($ch ,CURLINFO_HEADER_OUT));
  101. //Возвращаем false, устанавливаем сообщение об ошибке----
  102. $err = curl_error($ch);
  103. if ($err) {
  104. $result = Array();
  105. $result['error'] = $err;
  106. return serialize($result);
  107. }
  108. //-------------------------------------------------------
  109.  
  110. curl_close($ch);
  111.  
  112. return $result;
  113. }
  114.  
  115. }
  116.  
  117. //call back функция для curl, ограничивает размер скачиваемого файла
  118. function curl_pb_callback($download_size, $downloaded, $upload_size, $uploaded) {
  119. global $ch;
  120. static $summ;
  121. if (!isset($summ)) {
  122. $summ = 0;
  123. }
  124. $summ+=$downloaded;
  125. if ($summ > 500 * 1024) {
  126. throw new Exception('Too long content');
  127. }
  128. return false;
  129. }