Update of /cvsroot/php-blog/additional_plugins/serendipity_plugin_amazon
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7481/serendipity_plugin_amazon
Added Files:
serendipity_plugin_amazon.php
Log Message:
Amazon Affiliates Plugin
--- NEW FILE: serendipity_plugin_amazon.php ---
<?php
switch ($serendipity['lang']) {
default:
case 'en':
@define('PLUGIN_AMAZON_TITLE', "Amazon Recommendations");
@define('PLUGIN_AMAZON_DESC', "Recommend Products at Amazon within the Amazon-Partnerprogram");
@define('PLUGIN_AMAZON_PROP_TITLE', "Title");
@define('PLUGIN_AMAZON_PROP_TITLE_DESC', "Title of this Recommendationsblock");
@define('PLUGIN_AMAZON_SITE', "Amazon-Site");
@define('PLUGIN_AMAZON_SITE_DESC', "Amazon-Site frmo which Descriptions are taken and to which Links are generated");
@define('PLUGIN_AMAZON_AMAZONID', "Partner-ID");
@define('PLUGIN_AMAZON_AMAZONID_DESC', "Your Partner-ID in the Amazon-Partnerprogram");
@define('PLUGIN_AMAZON_ASIN', "ASIN-List");
@define('PLUGIN_AMAZON_ASIN_DESC', "Commaseparated List of ASIN you'd like to recommend");
break;
case 'de':
@define('PLUGIN_AMAZON_TITLE', "Amazon Empfehlungen");
@define('PLUGIN_AMAZON_DESC', "Empfehlungsblock für Produkte innerhalb des Amazon-Partnerprogramms");
@define('PLUGIN_AMAZON_PROP_TITLE', "Titel");
@define('PLUGIN_AMAZON_PROP_TITLE_DESC', "Titel des Empfehlungsblocks");
@define('PLUGIN_AMAZON_SITE', "Amazon-Site");
@define('PLUGIN_AMAZON_SITE_DESC', "Amazon-Site von der Beschreibungen geladen und zu der Links generiert werden");
@define('PLUGIN_AMAZON_AMAZONID', "Partner-ID");
@define('PLUGIN_AMAZON_AMAZONID_DESC', "Deine Partner-ID im Amazon-Partnerprogramm");
@define('PLUGIN_AMAZON_ASIN', "ASIN-Liste");
@define('PLUGIN_AMAZON_ASIN_DESC', "Kommaseparierte Liste von ASIN die vorgestellt werden sollen");
break;
}
class serendipity_plugin_amazon extends serendipity_plugin {
function introspect(&$propbag) {
$propbag->add('name', PLUGIN_AMAZON_TITLE);
$propbag->add('description', PLUGIN_AMAZON_DESC);
$propbag->add('configuration', array('title', 'site', 'amazonid', 'asin', 'articleinfo', 'info_asin'));
}
function introspect_config_item($name, &$propbag) {
switch($name) {
case 'title':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_AMAZON_PROP_TITLE);
$propbag->add('description', PLUGIN_AMAZON_PROP_TITLE_DESC);
$propbag->add('default', PLUGIN_AMAZON_TITLE);
break;
case 'site':
$propbag->add('type', 'select');
$propbag->add('name', PLUGIN_AMAZON_SITE);
$propbag->add('description', PLUGIN_AMAZON_SITE_DESC);
$propbag->add('select_values', array('de' => 'Amazon.de', 'com' => 'Amazon.com'));
$propbag->add('default', $serendipity['lang']=="en"?"com":$serendipity['lang']);
break;
case 'amazonid':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_AMAZON_AMAZONID);
$propbag->add('description', PLUGIN_AMAZON_AMAZONID_DESC);
$propbag->add('default', '');
break;
case 'asin':
$propbag->add('type', 'text');
$propbag->add('name', PLUGIN_AMAZON_ASIN);
$propbag->add('description', PLUGIN_AMAZON_ASIN_DESC);
$propbag->add('default', '');
break;
case 'articleinfo':
case 'info_asin':
$propbag->add('type', 'hidden');
$propbag->add('default', '');
break;
default:
return false;
}
return true;
}
function generate_content(&$title) {
global $serendipity;
$title = $this->get_config('title');
$site = $this->get_config('site');
$amazonid = $this->get_config('amazonid');
$articleinfo = unserialize($this->get_config('articleinfo'));
$info_asin = $this->get_config('info_asin');
$config_asin = $this->get_config('asin');
$config_asins = explode(",", $config_asin);
$changesmade = 0;
if($info_asin != $config_asin) {
$articleinfo = array();
$changesmade++;
}
foreach($config_asins as $asin) {
$asin = preg_replace('/\s+/', '', $asin);
$found = 0;
foreach($articleinfo as $article) {
if($article['asin'] == $asin && file_exists($article['imgpath'])) {
$found++;
break;
}
}
if(! $found) {
$articleinfo[] = $this->amazon_fetch($asin, $site);
$changesmade++;
}
}
if($changesmade) {
$this->set_config('info_asin', $config_asin);
$this->set_config('articleinfo', serialize($articleinfo));
}
$show = rand(0, sizeof($articleinfo)-1);
echo "<div align='center'><a href='".$articleinfo[$show][url]."/".$amazonid."' target='_SELF'><img src='".$articleinfo[$show][imgpath]."' alt='".$articleinfo[$show][desc]."' border='0'></a></div>";
}
function amazon_fetch($asin, $site="de") {
$local_path = "uploads/amazon/$asin.jpg";
$amazon_url = "http://www.amazon.".$site."/exec/obidos/ASIN/$asin";
$ret = array();
if(! file_exists($local_path)) {
echo "<div style='font-size:xx-small'>";
echo "getting $asin<br>";
$content = join('', file($amazon_url));
if(! $content) {
echo "no content for $asin<br>";
}
if(preg_match('@<\s*meta\s+name\s*=\s*([\'"])description\1\s+content\s*=\s*([\'"])(.*?)\2@i', $content, $matches)) {
$description = $matches[3];
if(preg_match('/^([^,]*?), ([^,]*)$/', $description, $matches)) {
$description = $matches[2].": ".$matches[1];
}
if($description) {
echo "description: <i>$description</i><br>";
}
}
if(preg_match('@<\s*img.*?src=\s*([\'"])(http://images-eu\.amazon\.com/images/.+/'.$asin.'.+?\.(jpg|gif))\1\s+@i', $content, $matches)) {
$image_url = $matches[2];
$file_type = strtolower($matches[3]);
}
if($image_url) {
echo "getting image<br>";
@mkdir("uploads", 0755);
@mkdir("uploads/amazon", 0755);
switch($file_type) {
case "jpg":
$file = fopen($image_url, "rb");
if($file) {
$save = fopen($local_path, "wb");
if($save) {
while($line = fread($file, 1024)) {
fwrite($save, $line);
}
}
}
break;
case "gif":
$img = imagecreatefromgif($image_url);
imagejpeg($img, $local_path);
break;
case "png":
$img = imagecreatefrompng($image_url);
imagejpeg($img, $local_path);
break;
}
}
echo "ready. next!<br><br>";
$ret['desc'] = $description;
}
$ret['asin'] = $asin;
$ret['imgpath'] = $local_path;
$ret['url'] = $amazon_url;
return $ret;
}
}
/ vim: set sts=4 ts=4 expandtab : /
?>
|