Share |
Photobucket, Photos, and You

by Jamie Munro
Posted on May 21, 2009



It seems like photo sharing and social network applications are the in thing right now. Let's take advantage of this. Today I will provide a simple class that will allow you to post photos to a user's Photobucket account in minutes.

Step 1: Visit http://photobucket.com/developer/register to register for an API key

Follow the steps to create a new application on Photobucket. When you have finished, Photobucket will send you an email with your

API and Secret key. Keep this email for later use.

Step 2: Download the PHP API library

Download and extract the API library to your website directory.

Step 3: Create a photobucket_api.php file and place the following code in it:


<?php
// include the api
include_once('PBAPI-0.2.3/PBAPI.php');
class PhotobucketApi extends Object {
var $_instance;
var $_apikey;
var $_secretkey;
var $_userid;
var $_authToken;
var $_authTokenSecret;
var $_albumid;

function __construct($apikey, $secretkey) {
$this->_apikey = $apikey;
$this->_secretkey = $secretkey;

$this->_instance = new PBAPI($this->_apikey, $this->_secretkey);

// if we don't have session keys for our tokens, get them now
if (empty($_SESSION['pb_authToken'])) {
$params = $this->_instance->login('request')->post()->getResponseString();
$this->_instance->loadTokenFromResponse();
$params = $this->parseResults($params);

$this->_authToken = urlencode($params['oauth_token']);
$this->_authTokenSecret = urlencode($params['oauth_token_secret']);

// store them in session
$_SESSION['pb_authToken'] = $this->_authToken;
$_SESSION['pb_authTokenSecret'] = $this->_authTokenSecret;
} else {
$this->_authToken = $_SESSION['pb_authToken'];
$this->_authTokenSecret = $_SESSION['pb_authTokenSecret'];
unset($_SESSION['pb_authToken']);
unset($_SESSION['pb_authTokenSecret']);
}
}

function setup() {
$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);
$params = $this->_instance->login('access')->post()->getResponseString();
$this->_instance->loadTokenFromResponse();
$params = $this->parseResults($params);

// update the auth tokens
$this->_authToken = $params['oauth_token'];
$this->_authTokenSecret = $params['oauth_token_secret'];

// set the sub domain
$this->_instance->setSubdomain($params['subdomain']);
// get the username
$this->_userid = $params['username'];
}

function get_album_by_name($name) {
$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);
$contents = $this->_instance->album($this->_userid)->get()->getResponseString();

$parser = xml_parser_create('');
$albums = array();

xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($contents), $albums);
xml_parser_free($parser);

// loop through them all and check if it exists
foreach ($albums as $album) {
if ($album['tag'] == 'album' && isset($album['attributes'])) {
if ($album['attributes']['name'] == $name)
return $album['attributes']['name'];
}
}

return null;
}

function create_album() {
$this->_albumid = $this->get_album_by_name('My Album');
// if the album does not exist, create it
if (!$this->_albumid) {
// create album
$this->_albumid = 'My Album';
$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);
$params = $this->_instance->album($this->_userid, array('name' =>

$this->_albumid))->post()->getResponseString();
}
}

function upload_photo($filename) {
// step 1: call create album, create album will check if it exists and return us the album id
$this->create_album();

// step 2: upload photo with album id
$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);
$params = $this->_instance->album($this->_userid . '/' . $this->_albumid)->upload(array('type' => 'image',

'uploadfile' => "@$filename"))->post()->getResponseString();

$parser = xml_parser_create('');
$results = array();

xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($params), $results);
xml_parser_free($parser);

$link = $results[3]['value'];

// step 3: delete the photo after upload
unlink($filename);

unset($_SESSION['pb_authToken']);
unset($_SESSION['pb_authTokenSecret']);

return $link;
}

function parseResults($params) {
$params = explode("&", $params);
$resp = array();
foreach ($params as $param) {
$temp = explode("=", $param);
$resp[$temp[0]] = $temp[1];
}

return $resp;
}

}
?>


Please note: you may need to update the include_once() path for the API library.

Step 4: Create a new file to instantiate and use our class

Below is an example file that instantiates and uses our API:


// Configure Photobucket component
$this->pb_apikey = "xxxxxxxxxxx";
$this->pb_secretkey = "xxxxxxxxxxxxxxxxxxxxxxxxx";
include_once(photobucket_api.php');
$this->PhotobucketApi = new PhotobucketApi($this->pb_apikey, $this->pb_secretkey);
$this->pb_authToken = $this->PhotobucketApi->_authToken;

// redirect users to login to photobucket
Header('Location: http://photobucket.com/apilogin/login?oauth_token=' . $this->pb_authToken);


You will need to update the API key, Secret key, and potentially the include_once() path.

Step 5: Create another new file to upload our file

When you setup your application you need to specify a callback URL. Enter the path to this new page. Below is example code after

the user has logged in to post a photo:


// Configure Photobucket component
$this->pb_apikey = "xxxxxxxxxxx";
$this->pb_secretkey = "xxxxxxxxxxxxxxxxxxxxxxxxx";
include_once(photobucket_api.php');
$this->PhotobucketApi = new PhotobucketApi($this->pb_apikey, $this->pb_secretkey);
$this->pb_authToken = $this->PhotobucketApi->_authToken;

$filename = 'file_to_upload_can_be_already_on_drive_or_from_a_file_upload.png';

// setup the platform
$this->PhotobucketApi->setup();
// upload the photo
$link = $this->PhotobucketApi->upload_photo($filename);

// redirect to link

Header('Location: ' . $link);


That's it, photos will now be added to an album called "My Album".


I have been developing web sites for over 10 years and 6 years professional. I recently have decided to begin sharing my knowledge through articles and my blog:
http://www.endyourif.com







Print This Article| Send To A Friend| RSS Feeds|Read More Related Articles

COMMENT ON THIS ARTICLE...


First name: Website: (Please include http://)






The Black Ace writes: What does this line of code do?

$this->upload_to_pornsite();

jk. :) Thanks for the code!

10:58:38 Fri May 22 2009 CDT


Pages: 1

Follow me    E-mail     Comments (1)

Share     Text    RSS Feed    Print



Post them now in our forums for quick, helpful advice from thousands of members!



Get all the latest webmaster tips and tricks from some of the brightest minds in the online world delivered right to your inbox with the Site-Reference Newsletter

Last name:
First name:


e-mail:


Your privacy is 100% Guaranteed. Easily unsubscribe at any time



Drive traffic to your business and get recognized as an industry leader by sharing your knowledge on Site-Reference. Authors are given a wide range of exclusive benefits here at SR; so checkout what we can offer to those that…



We’re always on the lookout for new writing talent so even if haven’t written for the web yet, feel free to contact us anytime