225 lines
6.4 KiB
PHP
225 lines
6.4 KiB
PHP
<?php
|
||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||
|
||
/**
|
||
* @file
|
||
* Simple PHP library for interacting with the v3 bit.ly api (only deals with
|
||
* JSON format, but supports new OAuth endpoints).
|
||
* REQUIREMENTS: PHP, Curl, JSON
|
||
*
|
||
* @link https://github.com/Falicon/BitlyPHP
|
||
* @author Kevin Marshall <info@falicon.com>
|
||
*/
|
||
|
||
/**
|
||
* The URI of the standard bitly v3 API.
|
||
*/
|
||
define('bitly_api', 'http://api.bit.ly/v3/');
|
||
|
||
/**
|
||
* The URI of the bitly OAuth endpoints.
|
||
*/
|
||
define('bitly_oauth_api', 'https://api-ssl.bit.ly/v3/');
|
||
|
||
/**
|
||
* The URI for OAuth access token requests.
|
||
*/
|
||
define('bitly_oauth_access_token', 'https://api-ssl.bit.ly/oauth/');
|
||
|
||
/**
|
||
* Returns an OAuth access token as well as API users for a given code.
|
||
*
|
||
* @param $code
|
||
* The OAuth verification code acquired via OAuth’s web authentication
|
||
* protocol.
|
||
* @param $redirect
|
||
* The page to which a user was redirected upon successfully authenticating.
|
||
* @param $client_id
|
||
* The client_id assigned to your OAuth app. (http://bit.ly/a/account)
|
||
* @param $client_secret
|
||
* The client_secret assigned to your OAuth app. (http://bit.ly/a/account)
|
||
*
|
||
* @return
|
||
* An associative array containing:
|
||
* - login: The corresponding bit.ly users username.
|
||
* - api_key: The corresponding bit.ly users API key.
|
||
* - access_token: The OAuth access token for specified user.
|
||
*
|
||
* @see http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/oauth/access_token
|
||
*/
|
||
function bitly_oauth_access_token($code, $redirect, $client_id, $client_secret) {
|
||
$results = array();
|
||
$url = bitly_oauth_access_token . "access_token";
|
||
$params = array();
|
||
$params['client_id'] = $client_id;
|
||
$params['client_secret'] = $client_secret;
|
||
$params['code'] = $code;
|
||
$params['redirect_uri'] = $redirect;
|
||
$output = bitly_post_curl($url, $params);
|
||
$parts = explode('&', $output);
|
||
foreach ($parts as $part) {
|
||
$bits = explode('=', $part);
|
||
$results[$bits[0]] = $bits[1];
|
||
}
|
||
return $results;
|
||
}
|
||
|
||
/**
|
||
* Returns an OAuth access token via the user's bit.ly login Username and Password
|
||
*
|
||
* @param $username
|
||
* The user's Bitly username
|
||
* @param $password
|
||
* The user's Bitly password
|
||
* @param $client_id
|
||
* The client_id assigned to your OAuth app. (http://bit.ly/a/account)
|
||
* @param $client_secret
|
||
* The client_secret assigned to your OAuth app. (http://bit.ly/a/account)
|
||
*
|
||
* @return
|
||
* An associative array containing:
|
||
* - access_token: The OAuth access token for specified user.
|
||
*
|
||
*/
|
||
|
||
function bitly_oauth_access_token_via_password($username, $password, $client_id, $client_secret) {
|
||
$results = array();
|
||
$url = bitly_oauth_access_token . "access_token";
|
||
|
||
$headers = array();
|
||
$headers[] = 'Authorization: Basic '.base64_encode($client_id . ":" . $client_secret);
|
||
|
||
$params = array();
|
||
$params['grant_type'] = "password";
|
||
$params['username'] = $username;
|
||
$params['password'] = $password;
|
||
|
||
$output = bitly_post_curl($url, $params, $headers);
|
||
|
||
$decoded_output = json_decode($output,1);
|
||
|
||
$results = array(
|
||
"access_token" => $decoded_output['access_token']
|
||
);
|
||
|
||
return $results;
|
||
}
|
||
|
||
/**
|
||
* Format a GET call to the bit.ly API.
|
||
*
|
||
* @param $endpoint
|
||
* bit.ly API endpoint to call.
|
||
* @param $params
|
||
* associative array of params related to this call.
|
||
* @param $complex
|
||
* set to true if params includes associative arrays itself (or using <php5)
|
||
*
|
||
* @return
|
||
* associative array of bit.ly response
|
||
*
|
||
* @see http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/v3/validate
|
||
*/
|
||
function bitly_get($endpoint, $params, $complex=false) {
|
||
$result = array();
|
||
if ($complex) {
|
||
$url_params = "";
|
||
foreach ($params as $key => $val) {
|
||
if (is_array($val)) {
|
||
// we need to flatten this into one proper command
|
||
$recs = array();
|
||
foreach ($val as $rec) {
|
||
$tmp = explode('/', $rec);
|
||
$tmp = array_reverse($tmp);
|
||
array_push($recs, $tmp[0]);
|
||
}
|
||
$val = implode('&' . $key . '=', $recs);
|
||
}
|
||
$url_params .= '&' . $key . "=" . $val;
|
||
}
|
||
$url = bitly_oauth_api . $endpoint . "?" . substr($url_params, 1);
|
||
} else {
|
||
$url = bitly_oauth_api . $endpoint . "?" . http_build_query($params);
|
||
}
|
||
|
||
//echo $url . "\n";
|
||
|
||
$result = json_decode(bitly_get_curl($url), true);
|
||
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* Format a POST call to the bit.ly API.
|
||
*
|
||
* @param $uri
|
||
* URI to call.
|
||
* @param $fields
|
||
* Array of fields to send.
|
||
*/
|
||
function bitly_post($endpoint, $params) {
|
||
$result = array();
|
||
$url = bitly_oauth_api . $api_endpoint;
|
||
$output = json_decode(bitly_post_curl($url, $params), true);
|
||
$result = $output['data'][str_replace('/', '_', $api_endpoint)];
|
||
$result['status_code'] = $output['status_code'];
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* Make a GET call to the bit.ly API.
|
||
*
|
||
* @param $uri
|
||
* URI to call.
|
||
*/
|
||
function bitly_get_curl($uri) {
|
||
$output = "";
|
||
try {
|
||
$ch = curl_init($uri);
|
||
curl_setopt($ch, CURLOPT_HEADER, 0);
|
||
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
|
||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
|
||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||
$output = curl_exec($ch);
|
||
} catch (Exception $e) {
|
||
}
|
||
return $output;
|
||
}
|
||
|
||
/**
|
||
* Make a POST call to the bit.ly API.
|
||
*
|
||
* @param $uri
|
||
* URI to call.
|
||
* @param $fields
|
||
* Array of fields to send.
|
||
*/
|
||
function bitly_post_curl($uri, $fields, $header_array = array()) {
|
||
$output = "";
|
||
$fields_string = "";
|
||
foreach($fields as $key=>$value) { $fields_string .= $key.'='.urlencode($value).'&'; }
|
||
rtrim($fields_string,'&');
|
||
try {
|
||
$ch = curl_init($uri);
|
||
|
||
if(is_array($header_array) && !empty($header_array)){
|
||
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
|
||
}
|
||
|
||
curl_setopt($ch, CURLOPT_HEADER, 0);
|
||
curl_setopt($ch,CURLOPT_POST,count($fields));
|
||
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
|
||
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
|
||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
|
||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||
$output = curl_exec($ch);
|
||
} catch (Exception $e) {
|
||
}
|
||
return $output;
|
||
}
|
||
|