Вход Регистрация
Файл: public_html/fs/resources/fotostrana.request.php
Строк: 62
<?php

/**
 * Класс, формирующий запросы к API
 */
class fotostranaRequest
{

    private 
$mode='GET';
    private 
$method;
    private 
$params=array();
    private 
$result_raw;
    private 
$result_formatted;
    private 
$cache;
    private 
$cache_allowed true;
    private 
$error;

    function 
__construct()
    {

        if (!
defined('FOTOSTRANA_REQUEST_LOG')) {
            
define('FOTOSTRANA_REQUEST_LOG'dirname(__FILE__).'/requests.log');
        }

        
$this->flushResult();
        
$this->cache = new fotostranaRequestsCache();

    }

    function 
setMethod($method)
    {
        
$this->flushResult();
        
$this->method=$method;
    }

    function 
setParam($name,$value)
    {
        if (
$value) {
            
$this->params[$name] = $value;
        }
    }

    function 
setParams($params=array())
    {
        
$this->params=$params;
    }

    function 
setMode($mode)
    {
        if (
strtoupper($mode)=='GET') {
            
$this->mode='GET';
        } else {
            
$this->mode='POST';
        }
    }

    function 
allowCache()
    {
        
$this->cache_allowed true;
    }

    function 
disallowCache()
    {
        
$this->cache_allowed false;
    }

    function 
get()
    {
        if (!
$this->result_formatted) {
            
$this->runRequest();
            
$this->formatResult();
        }
        
$r $this->result_formatted;
        return 
$r;
    }

    function 
getError()
    {
        return 
$this->error;
    }

    private function 
formatResult()
    {
        try {
            if (
$this->result_raw) {

                
$this->result_formatted json_decode($this->result_rawtrue);

                if (
array_key_exists('error',$this->result_formatted)) {
                    
$this->error $this->result_formatted['error'];
                    throw new 
fotostranaError('Error: '.$this->error['error_subcode'] . ': ' $this->error['error_msg']);
                }

            }
        } catch (
fotostranaError $e) {
            echo 
$e->getMessage();
        }
    }

    private function 
runRequest()
    {

        
// готовим запрос
        
$r = new fotostranaSubRequest();
        
$p array_merge($this->params, array('method'=>$this->method));

        if (
$this->cache_allowed && $cached_result $this->cache->loadCache($p)) {
            
$this->result_raw $cached_result;
            if (
FOTOSTRANA_REQUEST_LOG) {
                
file_put_contents(FOTOSTRANA_REQUEST_LOGdate('r').' cache: '.$this->method.' '.serialize($this->params).' '.serialize($cached_result)."nn"FILE_APPEND);
            }
            return;
        }

        
// делаем паузу, чтобы соблюдать требование MAX_QUERIES PER_TIME
        
fotostranaRequestsCounter::addQuery();
        
fotostranaRequestsCounter::wait();

        
$url $r->makeApiRequestUrl$p );

        if (
FOTOSTRANA_DEBUG) { echo "Fetching URL ".htmlspecialchars($url)." by ".$this->mode."<br>n"; }

        
// делаем запрос
        
if (strtoupper($this->mode)=='GET') {
            
$this->result_raw file_get_contents($url);
        } else {
            
$ch curl_init();
            
curl_setopt($chCURLOPT_HEADER0);
            
curl_setopt($chCURLOPT_VERBOSE0);
            
curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible;)");
            
curl_setopt($chCURLOPT_URL$url);
            
curl_setopt($chCURLOPT_POSTtrue);
            
curl_setopt($chCURLOPT_POSTFIELDS$this->params);
            
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
$this->result_raw curl_exec($ch);
            
curl_close($ch);
        }

        if (
FOTOSTRANA_REQUEST_LOG) {
            
file_put_contents(FOTOSTRANA_REQUEST_LOGdate('r').' request: '.$this->method.' '.serialize($this->params).' '.$this->result_raw."nn"FILE_APPEND);
        }

        if (
$this->cache_allowed) {
            
$this->cache->storeCache($p$this->result_raw);
        }

        if (
FOTOSTRANA_DEBUG) { var_dump($this->result_raw); }
    }

    private function 
flushResult()
    {
        
$this->method false;
        
$this->params = array();
        
$this->result_raw false;
        
$this->result_formatted false;
        
$this->error false;
        
$this->mode='GET';
        
$this->allowCache();
    }

}

?>
Онлайн: 2
Реклама