You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.8 KiB
120 lines
2.8 KiB
6 years ago
|
<?php
|
||
|
namespace TwitterPhp\Connection;
|
||
|
|
||
|
/**
|
||
|
* Class Base
|
||
|
* @package TwitterPhp
|
||
|
* @subpackage Connection
|
||
|
*/
|
||
|
abstract class Base
|
||
|
{
|
||
|
/**
|
||
|
* Url for Twitter api
|
||
|
*/
|
||
|
const TWITTER_API_URL = 'https://api.twitter.com';
|
||
|
|
||
|
/**
|
||
|
* Twitter URL that authenticates bearer tokens
|
||
|
*/
|
||
|
const TWITTER_API_AUTH_URL = 'https://api.twitter.com/oauth2/token/';
|
||
|
|
||
|
/**
|
||
|
* Version of Twitter api
|
||
|
*/
|
||
|
const TWITTER_API_VERSION = '1.1';
|
||
|
|
||
|
/**
|
||
|
* Timeout value for curl connections
|
||
|
*/
|
||
|
const DEFAULT_TIMEOUT = 10;
|
||
|
|
||
|
/**
|
||
|
* METHOD GET
|
||
|
*/
|
||
|
const METHOD_GET = 'GET';
|
||
|
|
||
|
/**
|
||
|
* METHOD POST
|
||
|
*/
|
||
|
const METHOD_POST = 'POST';
|
||
|
|
||
|
/**
|
||
|
* @param string $url
|
||
|
* @param array $parameters
|
||
|
* @param $method
|
||
|
* @return array
|
||
|
*/
|
||
|
abstract protected function _buildHeaders($url,array $parameters = null,$method);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Do GET request to Twitter api
|
||
|
*
|
||
|
* @link https://dev.twitter.com/docs/api/1.1
|
||
|
*
|
||
|
* @param $resource
|
||
|
* @param array $parameters
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function get($resource, array $parameters = array())
|
||
|
{
|
||
|
$url = $this->_prepareUrl($resource);
|
||
|
$headers = $this->_buildHeaders($url,$parameters,self::METHOD_GET);
|
||
|
$url = $url . '?' . http_build_query($parameters);
|
||
|
$curlParams = array (
|
||
|
CURLOPT_URL => $url,
|
||
|
CURLOPT_HTTPHEADER => $headers
|
||
|
);
|
||
|
|
||
|
return $this->_callApi($curlParams);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Do POST request to Twitter api
|
||
|
*
|
||
|
* @link https://dev.twitter.com/docs/api/1.1
|
||
|
*
|
||
|
* @param $resource
|
||
|
* @param array $parameters
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function post($resource, array $parameters = array())
|
||
|
{
|
||
|
$url = $this->_prepareUrl($resource);
|
||
|
$headers = $this->_buildHeaders($url,$parameters,self::METHOD_POST);
|
||
|
$curlParams = array (
|
||
|
CURLOPT_URL => $url,
|
||
|
CURLOPT_POST => 1,
|
||
|
CURLOPT_POSTFIELDS => $parameters,
|
||
|
CURLOPT_HTTPHEADER => $headers
|
||
|
);
|
||
|
|
||
|
return $this->_callApi($curlParams);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Call Twitter api
|
||
|
*
|
||
|
* @param array $params
|
||
|
* @return array
|
||
|
*/
|
||
|
protected function _callApi(array $params)
|
||
|
{
|
||
|
$curl = curl_init();
|
||
|
curl_setopt_array($curl,$params);
|
||
|
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||
|
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, self::DEFAULT_TIMEOUT);
|
||
|
$response = curl_exec($curl);
|
||
|
return json_decode($response,true);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $resource
|
||
|
* @return string
|
||
|
*/
|
||
|
private function _prepareUrl($resource)
|
||
|
{
|
||
|
return self::TWITTER_API_URL . '/' . self::TWITTER_API_VERSION . '/' . ltrim($resource,'/') . '.json';
|
||
|
}
|
||
|
}
|