2015-10-08 5 views
0

У меня возникли проблемы с получением кеша API, с которым я работаю.Проблемы с кэшем API с php

Код ниже прекрасно работает, когда $cache->$do_url - это просто файл без массива для ID и KEY, но проблема, с которой я столкнулась, - это передать API-идентификатор и ключ, чтобы API мог плевать мне нужна информация.

namespace Gilbitron\Util; 
class SimpleCache { 

    // Path to cache folder (with trailing /) 
    public $cache_path = 'cache/'; 
    // Length of time to cache a file (in seconds) 
    public $cache_time = 86400; 
    // Cache file extension 
    public $cache_extension = '.cache'; 

    // This is just a functionality wrapper function 
    public function get_data($label, $url) 
    { 
     if($data = $this->get_cache($label)){ 
      return $data; 
     } else { 
      $data = $this->do_curl($url); 
      $this->set_cache($label, $data); 
      return $data; 
     } 
    } 

    public function set_cache($label, $data) 
    { 
     file_put_contents($this->cache_path . $this->safe_filename($label) . $this->cache_extension, $data); 
    } 

    public function get_cache($label) 
    { 
     if($this->is_cached($label)){ 
      $filename = $this->cache_path . $this->safe_filename($label) . $this->cache_extension; 
      return file_get_contents($filename); 
     } 

     return false; 
    } 

    public function is_cached($label) 
    { 
     $filename = $this->cache_path . $this->safe_filename($label) . $this->cache_extension; 

     if(file_exists($filename) && (filemtime($filename) + $this->cache_time >= time())) return true; 

     return false; 
    } 

    //Helper function for retrieving data from url 
    public function do_curl($url) 
    { 
     if(function_exists("curl_init")){ 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
      $content = curl_exec($ch); 
      curl_close($ch); 
      return $content; 
     } else { 
      return file_get_contents($url); 
     } 
    } 

    //Helper function to validate filenames 
    private function safe_filename($filename) 
    { 
     return preg_replace('/[^0-9a-z\.\_\-]/i','', strtolower($filename)); 
    } 
} 

$cache = new SimpleCache(); 
$cache->cache_path = 'cache/'; 
$cache->cache_time = 86400; 

if($data = $cache->get_cache('label')){ 
    $data = json_decode($data); 
} else { 
    $data = $cache->do_curl('http://data.leafly.com/locations/denver-relief/reviews?skip=0&take=12', 
       array(
        'headers' => array(
         'app_id' => 'MYIDHERE', 
         'app_key' => 'MYKEYHERE' 
        ) 
       ) 
      ); 
    $cache->set_cache('label', $data); 
    $data = json_decode($data); 
} 

print_r($data); 

Любые идеи?

EDIT С ОТВЕТА

Для тех, кто ищет через Google для подобного вопроса, я нашел ответ.

Я изменил do_curl линию, которая тянет ссылку API для этого:

$data = $cache->do_curl('http://data.leafly.com/locations/denver-relief/reviews?skip=0&take=12'); 

и добавил следующую строку в функции do_curl тянуть в заголовке app_id и app_key Информация необходимое:

curl_setopt($ch, CURLOPT_HTTPHEADER,array('app_id: MYAPPID','app_key: MYAPPKEY')); 
+0

Поздравляем! Похоже, вы нашли свое решение за несколько секунд до того, как я набрал его :) Тем не менее, посмотрите, как он содержит предложение о том, как сделать ваш запрос на завивание более динамичным, передав заголовки переменной –

+0

@ T3H40 спасибо! да, я занимался поиском после того, как я опубликовал его и нашел. Идти, чтобы отметить ваш ответ как правильный, но так как вы дали правильный ответ. –

+0

благодарит кучу! Рад, что я (мог бы) помог :) –

ответ

2

Ваш public function do_curl($url) имеет только один параметр. Чтобы передать заголовки, вам необходимо добавить такой параметр: public function do_curl($url, $header).

Вы можете добавить эти заголовки, используя что-то вроде следующего кода: curl_setopt($ch, CURLOPT_HTTPHEADER, $header); Ваш вызов метода должен быть как:

$data = $cache->do_curl( 
    'http://data.leafly.com/locations/denver-relief/reviews?skip=0&take=12', 
    array('app_id: MYIDHERE', 'app_key: MYKEYHERE') 
); 

Посмотрите here для справки.

Также посмотрите на documentation.

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