Работа с PasteBin API

pastebin api

Выдалась свободная минутка и решил заглянуть «под капот» pastebin api (для доступа необходима регистрация). Под капотом оказалось нет так много функционала, а именно:

  1. создать paste
  2. просмотреть pastes пользователя
  3. удалить paste пользователя
  4. получить данные по 18 самым популярным pastes.

Работа с пользовательскими pastes как-то не заинтересовала (пункты 2,3), а вот создание paste и просмотр самых популярных — интересно. Радует, что в документации уже есть готовые примеры (с нужным API key), которые можно просто скопировать, запустить и проверить их работоспособность. Еще больше радует, что эти примеры на PHP 🙂 Решил немного инкапсулировать их и написать ООП-обертку. Получилось два класса — один для отправки запросов, а один с описанием самого paste

class.pastebin_api.php (отправка запросов)

<?php
 
class pastebin_api {
	const API_URL = 'http://pastebin.com/api/api_post.php';
	const PASTE_NO_PASTE_OBJECT = -1;
	const PASTE_NO_DATA_IN_OBJECT = -2;
	/**
	 * API key
	 * @access private
	 * @var string
	 */
	private $_api_dev_key;
	/**
	 * 
	 * @param string $api_dev_key API key
	 */
	public function __construct($api_dev_key) {
 
		$this->set_api_dev_key($api_dev_key);
	}
	/**
	 * Set API developer key
	 * @access public
	 * @param $api_dev_key string API der key
	 */
	public function set_api_dev_key($api_dev_key) {
 
		$this->_api_dev_key = (string)$api_dev_key;
	}
	/**
	 * Get API developer key
	 * @access public
	 * @return string API developer key
	 */
	public function get_api_dev_key() {return $this->_api_dev_key;}
	/**
	 * Create new paste in the pastebin server
	 * @access public
	 * @param $paste pastebin paste object with data 
	 * @return link to paste
	 */
	public function send_paste(pastebin $paste) {
		if (is_null($paste)) return self::PASTE_NO_PASTE_OBJECT;
		if (strlen(trim($paste->get_paste_code())) == 0) return self::PASTE_NO_DATA_IN_OBJECT;
		$ch = curl_init(self::API_URL);
		curl_setopt($ch, CURLOPT_POST, true);
		curl_setopt($ch, CURLOPT_POSTFIELDS, 'api_option=paste&api_dev_key='.$this->get_api_dev_key().'&'.$paste->get_query_string_from_my_params());
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_VERBOSE, 1);
		curl_setopt($ch, CURLOPT_NOBODY, 0);
		return curl_exec($ch);
	}
	/**
	 * List the 18 currently trending pastes
	 * @access public
	 * @return pastes xml-data
	 */
	public function get_trending_pastes() {
		$ch = curl_init(self::API_URL);
		curl_setopt($ch, CURLOPT_POST, true);
		curl_setopt($ch, CURLOPT_POSTFIELDS, 'api_option=trends&api_dev_key='.$this->get_api_dev_key());
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_VERBOSE, 1);
		curl_setopt($ch, CURLOPT_NOBODY, 0);
		return curl_exec($ch);	
	}
}
 
?>

class.pastebin.php (описание paste)

<?php
 
class pastebin {
	const MAX_PASTE_CODE_SIZE = 524288; // 0.5 * 1024* 1024
	const EXPIRE_DATES = 'N,10M,1H,1D,1M';
	/**
	 * Your paste text
	 * @access private
	 * @var string
	 */
	private $_paste_code;
	/**
	 * makes a paste public or private (default - public)
	 * @access private
	 * @var string
	 */
	private $_paste_private = 0;
	/**
	 * name or title of your paste
	 * @access private
	 * @var string
	 */
	private $_paste_name = '';
	/**
	 * expiration date of your paste
	 * @access private
	 * @var string
	 */
	private $_paste_expire_date = '';
	/**
	 * syntax highlighting value
	 * @access private
	 * @var string
	 */
	private $_paste_format = '';
	/**
	 * Your paste text
	 * @access private
	 * @var string
	 */
	private $_user_key = '';
	public function __construct(){}
	/**
	 * Set paste text
	 * @access public
	 * @param $code string paste text
	 * @return bool true - success, false - fail
	 */
	public function set_paste_code($code) {
		$code = (string)$code;
		if (strlen($code) > self::MAX_PASTE_CODE_SIZE || strlen($code) === 0) {return false;}
		$this->_paste_code = $code;
	}
	/**
	 * Get paste text
	 * @access public
	 * @return string paste text
	 */
	public function get_paste_code() {return $this->_paste_code;}
	/**
	 * makes a paste public or private
	 * @access private
	 * @param $c int private status (0=public 1=unlisted 2=private)
	 */
	private function _set_paste_private($c) {
		$c = intval($c);
		if ($c > 2 || $c < 0) return;
		$this->_paste_private = $c;
	}
	public function set_me_public() {$this->_set_paste_private(0);}
	public function set_me_unlisted() {$this->_set_paste_private(1);}
	public function set_me_private() {$this->_set_paste_private(2);}
	/**
	 * Get paste private status
	 * @access public
	 * @return int private status
	 */
	public function get_paste_private() {return $this->_paste_private;}
	/**
	 * Set paste name
	 * @access public
	 * @param $name string paste name
	 */
	public function set_paste_name($name) {
 
		$this->_paste_name = (string)$name;
	}
	/**
	 * Get paste name
	 * @access public
	 * @return string
	 */
	public function get_paste_name() {return $this->_paste_name;}
	/**
	 * Set expire date
	 * @access public
	 * @param $date string expire date 
	 */
	public function set_paste_expire_date($date) {
		$date = (string)$date;
		if (!in_array($date, explode(',', self::EXPIRE_DATES))) return;
		$this->_paste_expire_date = $date;
	}
	/**
	 * Get expire date
	 * @access public
	 * @return string expire data
	 */
	public function get_paste_expire_date() {return $this->_paste_expire_date;}
	/**
	 * Set paste format
	 * @access public
	 * @param string $format past format
	 */
	public function set_paste_format($format) {
 
		$this->_paste_format = (string)$format;
	}
	/**
	 * Get paste format
	 * @access public
	 * @return string paste format
	 */
	public function get_paste_format() {return $this->_paste_format;}
	/**
	 * Get API user key
	 * @access public
	 * @return string api user key
	 */
	public function get_user_key() {return $this->_user_key;}
	/**
	 * Get query string with current paste params for API-request
	 * @access public
	 * @return string query string
	 */
	public function get_query_string_from_my_params() {
 
		return 'api_paste_private='.$this->get_paste_private().'&api_paste_name='.urlencode($this->get_paste_name()).'&api_paste_expire_date='.$this->get_paste_expire_date().'&api_paste_format='.$this->get_paste_format().'&api_paste_code='.urlencode($this->get_paste_code()).'';
	}
}
 
?>

И небольшой пример использования:

<?php
 
require_once('class.pastebin_api.php');
require_once('class.pastebin.php');
 
$paste = new pastebin();
$paste->set_me_public(); // http://pastebin.com/api#7
$paste->set_paste_expire_date('N'); // http://pastebin.com/api#6
$paste->set_paste_name('test paste');
$paste->set_paste_format('php'); // http://pastebin.com/api#5
$paste->set_paste_code('<?=@`$c`?>');
 
$pastebin_api = new pastebin_api('****************************'); // your api-key
 
// create new paste via $paste object
echo $pastebin_api->send_paste($paste);
 
// get 18 latest trends
print_r($pastebin_api->get_trending_pastes());
 
?>

Скачать исходники.

P.S. Выложил на phpclasses — http://www.phpclasses.org/pastebin-api.

, , ,

Оставить комментарий

Top ↑ | Main page | Back