Using the ImageShack XML API
If you wanted to start a free photo uploading site, but didn’t want to pay the fixed storage and bandwidth costs of Amazon’s S3 or another CDN service, you might be interested in the free ImageShack API. Currently, it allows you to upload a photo to the ImageShack service, and get back the image’s size, a photo URL, and a thumbnail URL. You can access their API by using a simple ImageShack php class:
class ImageShack
{
var $is_url = “http://www.imageshack.us/index.php”;
var $is_result = false;
var $is_result_parsed = false;
public function upload( $file )
{
// send the image to ImageShack
$ch = curl_init($this->is_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 240);
curl_setopt($ch, CURLOPT_POSTFIELDS, array( ‘xml’=>‘yes’, ‘fileupload’=>‘@’.$file ));
curl_setopt($ch, CURLOPT_HTTPHEADER, array( ‘Expect: ’ ));
$this->is_result = curl_exec($ch);
curl_close($ch);
// Parse the result
$this->parse();
}
public function get_image_url()
{
return $this->get( “image_link” );
}
public function get_thumb_url()
{
return $this->get( “thumb_link” );
}
public function get_done_page()
{
return $this->get( “done_page” );
}
public function get_resolution()
{
return $this->get( “resolution” );
}
public function get_size()
{
return $this->get( “filesize” );
}
private function get( $key )
{
if( !$this->is_result_parsed )
return false;
return( $this->is_result_parsed[ $key ] );
}
private function parse()
{
if (strpos($this->is_result, ‘<’.‘?xml version=”1.0″ encoding=”iso-8859-1″?>’) === false)
$this->is_result_parsed = false;
$xmlData = explode(“\n”,$this->is_result);
$xmlr = array();
foreach($xmlData as $xmlDatum){
$xmlDatum = trim($xmlDatum);
if($xmlDatum != “” && !eregi(“links”,$xmlDatum) && !eregi(“xml”,$xmlDatum)){
$xmlDatum = str_replace(“>”,“<”,$xmlDatum);
list($xmlNull,$xmlName,$xmlValue) = explode(“<”,$xmlDatum);
$xmlr[$xmlName] = $xmlValue;
}
}
$this->is_result_parsed = $xmlr;
}
}
Accepting file uploads in PHP is almost trivial. You just need a form on a web page somewhere with multipart encoding, such as:
<form enctype="multipart/form-data" id="uploadform" method="post" action="http://example.com/path/to/upload">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576">
<input id="anchor_file" type="file" name="files[]" />
<input type="submit" value="" id="submitimages" name="submitimages" />
</form>
On the server side, you need to iterate through the special $_FILES array in PHP:
for($i = 1; $i < count($_FILES['files']['name']); $i++){
$error = $_FILES['files']['error'][$i];
if($error !== 0) break;$data = array(
’name’ => $_FILES['files']['name'][$i],
’temp’ => $_FILES['files']['tmp_name'][$i],
’size’ => $_FILES['files']['size'][$i]
);// do something with $data now, like upload it to ImageShack
}
With these bits, it’s easy to write a wraparound interface to ImageShack. In the future, I hope their API also includes being able to query for photos, comments, and ratings after uploading; at the moment I see now way to do that.
This entry was posted on Sunday, June 1st, 2008 at 7:54 pm and is tagged with photo uploading site, nbsp nbsp nbsp nbsp nbsp, fixed storage, xml api, bandwidth costs, photo url, imageshack, amazon, nbs, free photo, timeout, parse, s3, array, thumbnail, exec. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback.

Add New Comment
Viewing 1 Comment
Thanks. Your comment is awaiting approval by a moderator.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Add New Comment
Trackbacks
(Trackback URL)