OSDN Git Service

PKWK_READONLY prohibits editing
[pukiwiki/pukiwiki.git] / plugin / amazon.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // $Id: amazon.inc.php,v 1.13 2005/02/08 14:27:16 henoheno Exp $
4 // Id: amazon.inc.php,v 1.1 2003/07/24 13:00:00 ´×¼Ë
5 //
6 // Amazon plugin: Book-review maker via amazon.com/amazon.jp
7 //
8 // Copyright:
9 //      2004 PukiWiki Developer Team
10 //      2003 ´×¼Ë <raku@rakunet.org> (Original author)
11 //
12 // License: GNU/GPL
13 //
14 // ChangeLog:
15 // * 2004/04/03 PukiWiki Developer Team (arino <arino@users.sourceforge.jp>)
16 //        - replace plugin_amazon_get_page().
17 //        - PLUGIN_AMAZON_XML 'xml.amazon.com' -> 'xml.amazon.co.jp'
18 // * 0.6  URL ¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¡¢No image ¤òɽ¼¨¡¢²èÁüÇÛÃ֤ʤɽ¤Àµ¡£
19 //        ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Î¸Æ¤Ó½Ð¤·Êý¤ò½¤Àµ¡£
20 //        ASIN ÈÖ¹æÉôʬ¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£
21 //        ²èÁü¡¢¥¿¥¤¥È¥ë¤Î¥­¥ã¥Ã¥·¥å¤Ë¤è¤ë®ÅÙ¤ÎÂçÉý¥¢¥Ã¥×¡£
22 // * 0.7  ¥Ö¥Ã¥¯¥ì¥Ó¥å¡¼À¸À®¤Î¥Ç¥Ð¥Ã¥°¡¢Ç§¾ÚÌäÂê¤Î°ì±þ¤Î¥¯¥ê¥¢¡£
23 // * 0.8  amazon Á´¾¦ÉʤβèÁü¤òɽ¼¨¡£
24 //        ¥¢¥½¥·¥¨¥¤¥È ID ¤ËÂбþ¡£
25 // * 0.9  RedHat9+php4.3.2+apache2.0.46 ¤Ç²èÁü¤¬ÅÓÃæ¤Þ¤Ç¤·¤«Æɤ߹þ¤Þ¤ì¤Ê¤¤ÌäÂê¤ËÂн衣
26 //        ÆüËܸì¥Ú¡¼¥¸¤Î²¼¤Ë¥Ö¥Ã¥¯¥ì¥Ó¥å¡¼¤òºî¤í¤¦¤È¤¹¤ë¤Èʸ»ú²½¤±¤·¤Æºî¤ì¤Ê¤¤ÌäÂê¤Î²ò·è¡£
27 //        ½ñÀҤǤʤ¯ CD ¤Ê¤É¡¢ASIN Éôʬ¤¬Ä¹¤¯¤Æ¤â¥¿¥¤¥È¥ë¤ò¤¦¤Þ¤¯½¦¤¦¤è¤¦¤Ë¤¹¤ë¡£
28 //        ¼Ì±Æ¤Î¤ß¼è¤ê¹þ¤à¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢B000002G6J.01 ¤È½ñ¤«¤º B000002G6J ¤È½ñ¤¤¤Æ¤â¼Ì±Æ¤¬½Ð¤ë¤è¤¦¤Ë¤¹¤ë¡£
29 //        ASIN ¤ËÂбþ¤¹¤ë¥­¥ã¥Ã¥·¥å²èÁü/¥­¥ã¥Ã¥·¥å¥¿¥¤¥È¥ë¤ò¤½¤ì¤¾¤ìºï½ü¤¹¤ëµ¡Ç½Äɲá£
30 //        proxy Âбþ(»î¸³Åª)¡£
31 //        proxy ¼ÂÁõ¤Î²áÄø¤Ç°ìÈ̥桼¥¶¤Î¤¿¤á¤Î AID ¤Ï¤Ê¤¯¤È¤â¼«Æ°À¸À®¤µ¤ì¤ë¤³¤È¤¬¤ï¤«¤ê¡¢ºï½ü¤·¤¿¡£
32 // * 1.0  ¥Ö¥Ã¥¯¥ì¥Ó¥å¡¼¤Ç¤Ê¤¯¡¢¥ì¥Ó¥å¡¼¤È¤¹¤ë¡£
33 //        ²èÁü¤Î¥­¥ã¥Ã¥·¥å¤òºï½ü¤¹¤ë´ü¸Â¤òÀߤ±¤ë¡£
34 //        ¥¿¥¤¥È¥ë¡¢¼Ì±Æ¤ò Web Services ¤Î XML ¥¢¥¯¥»¥¹¤ÎÊýË¡¤Ë¤è¤Ã¤Æ get ¤¹¤ë¤³¤È¤Ç»þ´Ö¤òû½Ì¤¹¤ë¡£
35 //        ¥ì¥Ó¥å¡¼¥Ú¡¼¥¸À¸À®¤Î¥¿¥¤¥ß¥ó¥°¤Ë¤Ä¤¤¤ÆÃí¤òÆþ¤ì¤ë¡£
36 // * 1.1  ÊÔ½¸À©¸Â¤ò¤«¤±¤Æ¤¤¤ë¾ì¹ç¡¢Éô³°¼Ô¤¬¥ì¥Ó¥å¡¼¤òºî¤í¤¦¤È¤·¤Æ¡¢¥Ú¡¼¥¸¤Ï¤Ç¤­¤Ê¤¤¤¬ ASIN4774110655.tit ¤Ê¤É¤Î¥­¥ã¥Ã¥·¥å¤¬¤Ç¤­¤ë¤Î¤ò²ò·è¡£
37 //        ²èÁü¤ÎºÇ¸å¤¬ 01 ¤Î¾ì¹ç¡¢image ¤òºï½ü¤¹¤ë¤È noimage.jpg ¤È¤Ê¤Ã¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£
38 //        1.0 ¤ÇƳÆþ¤·¤¿ XML ¥¢¥¯¥»¥¹¤Ï¹â®¤À¤¬¡¢ÊÖ¤¹²èÁü¾ðÊ󤬥¦¥½¤Ê¤Î¤Ç¡¢09 ¤¬¤À¤á¤Ê¤é 01 ¤ò¥È¥é¥¤¤¹¤ë¡¢¤Ç»ÃÄêŪ¤Ë²ò·è¡£
39 //
40 // Caution!:
41 // * Ãøºî¸¢¤¬´ØÏ¢¤¹¤ë°Ù¡¢www.amazon.co.jp ¤Î¥¢¥½¥·¥¨¥¤¥È¥×¥í¥°¥é¥à¤ò³Îǧ¤Î¾å¤´ÍøÍѲ¼¤µ¤¤¡£
42 // * ¥ì¥Ó¥å¡¼¤Ï¡¢amazon ¥×¥é¥°¥¤¥ó¤¬¸Æ¤Ó½Ð¤¹ÊÔ½¸²èÌ̤Ϥ⤦½ÐÍè¤Æ PukiWiki ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢
43 //   Ãæ»ß¤¹¤ë¤Ê¤éÁ´Ê¸¤òºï½ü¤·¤Æ¥Ú¡¼¥¸¤Î¹¹¿·¥Ü¥¿¥ó¤ò²¡¤¹¤³¤È¡£
44 // * ²¼¤Î PLUGIN_AMAZON_AID¡¢PROXY ¥µ¡¼¥Ð¤ÎÉôʬ¡¢expire ¤ÎÉôʬ¤òŬÅö¤ËÊÔ½¸¤·¤Æ»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤(¾¤Ï¤½¤Î¤Þ¤Þ¤Ç¤â Ok)¡£
45 //
46 // Thanks to: Reimy and PukiWiki Developers Team
47 //
48
49 /////////////////////////////////////////////////
50 // Settings
51
52 // Amazon associate ID
53 //define('PLUGIN_AMAZON_AID',''); // None
54 define('PLUGIN_AMAZON_AID','');
55
56 // Expire caches per ? days
57 define('PLUGIN_AMAZON_EXPIRE_IMAGECACHE',   1);
58 define('PLUGIN_AMAZON_EXPIRE_TITLECACHE', 356);
59
60 // Alternative image for 'Image not found'
61 define('PLUGIN_AMAZON_NO_IMAGE', IMAGE_DIR . 'noimage.png');
62
63 // URI prefixes
64 switch(LANG){
65 case 'ja':
66         // Amazon shop
67         define('PLUGIN_AMAZON_SHOP_URI', 'http://www.amazon.co.jp/exec/obidos/ASIN/');
68
69         // Amazon information inquiry (dev-t = default value in the manual)
70         define('PLUGIN_AMAZON_XML', 'http://xml.amazon.co.jp/onca/xml3?t=webservices-20&' .
71                 'dev-t=GTYDRES564THU&type=lite&page=1&f=xml&locale=jp&AsinSearch=');
72         break;
73 default:
74         // Amazon shop
75         define('PLUGIN_AMAZON_SHOP_URI', 'http://www.amazon.com/exec/obidos/ASIN/');
76
77         // Amazon information inquiry (dev-t = default value in the manual)
78         define('PLUGIN_AMAZON_XML', 'http://xml.amazon.com/onca/xml3?t=webservices-20&' .
79                 'dev-t=GTYDRES564THU&type=lite&page=1&f=xml&locale=us&AsinSearch=');
80         break;
81 }
82
83 /////////////////////////////////////////////////
84
85 function plugin_amazon_init()
86 {
87         global $amazon_aid, $amazon_body;
88
89         if (PLUGIN_AMAZON_AID == '') {
90                 $amazon_aid = '';
91         } else {
92                 $amazon_aid = PLUGIN_AMAZON_AID . '/';
93         }
94         $amazon_body = <<<EOD
95 -ºî¼Ô: [[¤³¤³ÊÔ½¸¤Î¤³¤È]]
96 -ɾ¼Ô: ¤ªÌ¾Á°
97 -ÆüÉÕ: &date;
98 **¤ªÁ¦¤áÂоÝ
99 [[¤³¤³ÊÔ½¸¤Î¤³¤È]]
100
101 #amazon(,clear)
102 **´¶ÁÛ
103 [[¤³¤³ÊÔ½¸¤Î¤³¤È]]
104
105 // ¤Þ¤º¡¢¤³¤Î¥ì¥Ó¥å¡¼¤ò»ß¤á¤ë¾ì¹ç¡¢Á´Ê¸¤òºï½ü¤·¡¢¥Ú¡¼¥¸¤Î[¹¹¿·¥Ü¥¿¥ó]¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡ª(PukiWiki ¤Ë¤Ï¤â¤¦ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤¹)
106 // Â³¤±¤ë¤Ê¤é¡¢¾å¤Î¡¢[[¤³¤³ÊÔ½¸¤Î¤³¤È]]Éôʬ¤ò³ç¸Ì¤ò´Þ¤á¤Æºï½ü¤·¡¢½ñ¤­Ä¾¤·¤Æ¤¯¤À¤µ¤¤¡£
107 // ¤ªÌ¾Á°¡¢Éôʬ¤Ï¤´¼«Ê¬¤Î̾Á°¤ËÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£»ä¤À¤È¡¢´×¼Ë¡¢¤Ç¤¹¡£
108 // **¤ªÁ¦¤áÂоݡ¢¤è¤ê¾å¤Ï¡¢¿·¤·¤¤¹Ô¤òÄɲ䷤ʤ¤¤Ç¤¯¤À¤µ¤¤¡£Ìܼ¡ºîÀ®¤Ë»ÈÍѤ¹¤ë¤Î¤Ç¡£
109 // //¤Ç»Ï¤Þ¤ë¥³¥á¥ó¥È¹Ô¤Ï¡¢ºÇ½ªÅª¤ËÁ´Éô¥«¥Ã¥È¤·¤Æ¤¯¤À¤µ¤¤¡£Ìܼ¡¤¬Àµ¾ï¤ËºîÀ®¤Ç¤­¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
110 #comment
111 EOD;
112 }
113
114 function plugin_amazon_convert()
115 {
116         global $script, $vars, $asin, $asin_all;
117
118         if (func_num_args() > 3) {
119                 if (PKWK_READONLY) return ''; // Show nothing
120
121                 return '#amazon([ASIN-number][,left|,right]' .
122                         '[,book-title|,image|,delimage|,deltitle|,delete])';
123
124         } else if (func_num_args() == 0) {
125                 // ¥ì¥Ó¥å¡¼ºîÀ®
126                 if (PKWK_READONLY) return ''; // Show nothing
127
128                 $s_page = htmlspecialchars($vars['page']);
129                 if ($s_page == '') $s_page = isset($vars['refer']) ? $vars['refer'] : '';
130                 $ret = <<<EOD
131 <form action="$script" method="post">
132  <div>
133   <input type="hidden" name="plugin" value="amazon" />
134   <input type="hidden" name="refer" value="$s_page" />
135   ASIN:
136   <input type="text" name="asin" size="30" value="" />
137   <input type="submit" value="¥ì¥Ó¥å¡¼ÊÔ½¸" /> (ISBN 10 ·å or ASIN 12 ·å)
138  </div>
139 </form>
140 EOD;
141                 return $ret;
142         }
143
144         $aryargs = func_get_args();
145
146         $align = strtolower($aryargs[1]);
147         if ($align == 'clear') return '<div style="clear:both"></div>'; // ²þ¹ÔÁÞÆþ
148         if ($align != 'left') $align = 'right'; // ÇÛÃÖ·èÄê
149
150         $asin_all = htmlspecialchars($aryargs[0]);  // for XSS
151         if (is_asin() == FALSE && $align != 'clear') return FALSE;
152
153         if ($aryargs[2] != '') {
154                 // ¥¿¥¤¥È¥ë»ØÄê
155                 $title = $alt = htmlspecialchars($aryargs[2]); // for XSS
156                 if ($alt == 'image') {
157                         $alt = plugin_amazon_get_asin_title();
158                         if ($alt == '') return FALSE;
159                         $title = '';
160                 } else if ($alt == 'delimage') {
161                         if (unlink(CACHE_DIR . 'ASIN' . $asin . '.jpg')) {
162                                 return 'Image of ' . $asin . ' deleted...';
163                         } else {
164                                 return 'Image of ' . $asin . ' NOT DELETED...';
165                         }
166                 } elseif ($alt == 'deltitle') {
167                         if (unlink(CACHE_DIR . 'ASIN' . $asin . '.tit')) {
168                                 return 'Title of ' . $asin . ' deleted...';
169                         } else {
170                                 return 'Title of ' . $asin . ' NOT DELETED...';
171                         }
172                 } elseif ($alt == 'delete') {
173                         if ((unlink(CACHE_DIR . 'ASIN' . $asin . '.jpg') &&
174                              unlink(CACHE_DIR . 'ASIN' . $asin . '.tit'))) {
175                                 return 'Title and Image of ' . $asin . ' deleted...';
176                         } else {
177                                 return 'Title and Image of ' . $asin . ' NOT DELETED...';
178                         }
179                 }
180         } else {
181                 // ¥¿¥¤¥È¥ë¼«Æ°¼èÆÀ
182                 $alt = $title = plugin_amazon_get_asin_title();
183                 if ($alt == '') return FALSE;
184         }
185
186         return plugin_amazon_print_object($align, $alt, $title);
187 }
188
189 function plugin_amazon_action()
190 {
191         global $vars, $script, $edit_auth, $edit_auth_users;
192         global $amazon_body, $asin, $asin_all;
193
194         if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
195
196         $asin_all = isset($vars['asin']) ?
197                 htmlspecialchars(rawurlencode(strip_bracket($vars['asin']))) : '';
198
199         if (! is_asin()) {
200                 $retvars['msg']   = '¥Ö¥Ã¥¯¥ì¥Ó¥å¡¼ÊÔ½¸';
201                 $retvars['refer'] = isset($vars['refer']) ? $vars['refer'] : '';
202                 $retvars['body']  = plugin_amazon_convert();
203                 return $retvars;
204
205         } else {
206                 $s_page     = $vars['refer'];
207                 $r_page     = $s_page . '/' . $asin;
208                 $r_page_url = rawurlencode($r_page);
209                 $auth_user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
210
211                 pkwk_headers_sent();
212                 if ($edit_auth && ($auth_user == '' || ! isset($edit_auth_users[$auth_user]) ||
213                         $edit_auth_users[$auth_user] != $_SERVER['PHP_AUTH_PW'])) {
214                         header('Location: ' . get_script_uri() . '?cmd=read&page=' . $r_page_url);
215                 } else {
216                         $title = plugin_amazon_get_asin_title();
217                         if ($title == '' || preg_match('/^\//', $s_page)) {
218                                 header('Location: ' . get_script_uri() .
219                                         '?cmd=read&page=' . encode($s_page));
220                         }
221                         $body = '#amazon(' . $asin_all . ',,image)' . "\n" .
222                                 '*' . $title . "\n" . $amazon_body;
223                         plugin_amazon_review_save($r_page, $body);
224                         header('Location: ' . get_script_uri() . '?cmd=edit&page=' . $r_page_url);
225                 }
226                 exit;
227         }
228 }
229
230 function plugin_amazon_inline()
231 {
232         global $amazon_aid, $asin, $asin_all;
233
234         list($asin_all) = func_get_args();
235
236         $asin_all = htmlspecialchars($asin_all); // for XSS
237         if (! is_asin()) return FALSE;
238
239         $title = plugin_amazon_get_asin_title();
240         if ($title == '') {
241                 return FALSE;
242         } else {
243                 return '<a href="' . PLUGIN_AMAZON_SHOP_URI .
244                         $asin . '/' . $amazon_aid . 'ref=nosim">' . $title . '</a>' . "\n";
245         }
246 }
247
248 function plugin_amazon_print_object($align, $alt, $title)
249 {
250         global $amazon_aid;
251         global $asin, $asin_ext, $asin_all;
252
253         $url      = plugin_amazon_cache_image_fetch(CACHE_DIR);
254         $url_shop = PLUGIN_AMAZON_SHOP_URI . $asin . '/' . $amazon_aid . 'ref=nosim';
255         $center   = 'text-align:center';
256
257         if ($title == '') {
258                 // Show image only
259                 $div  = '<div style="float:' . $align . ';margin:16px 16px 16px 16px;' . $center . '">' . "\n";
260                 $div .= ' <a href="' . $url_shop . '"><img src="' . $url . '" alt="' . $alt . '" /></a>' . "\n";
261                 $div .= '</div>' . "\n";
262
263         } else {
264                 // Show image and title
265                 $div  = '<div style="float:' . $align . ';padding:.5em 1.5em .5em 1.5em;' . $center . '">' . "\n";
266                 $div .= ' <table style="width:110px;border:0;' . $center . '">' . "\n";
267                 $div .= '  <tr><td style="' . $center . '">' . "\n";
268                 $div .= '   <a href="' . $url_shop . '"><img src="' . $url . '" alt="' . $alt  .'" /></a></td></tr>' . "\n";
269                 $div .= '  <tr><td style="' . $center . '"><a href="' . $url_shop . '">' . $title . '</a></td></tr>' . "\n";
270                 $div .= ' </table>' . "\n";
271                 $div .= '</div>' . "\n";
272         }
273         return $div;
274 }
275
276 function plugin_amazon_get_asin_title()
277 {
278         global $asin, $asin_ext, $asin_all;
279
280         if ($asin_all == '') return '';
281
282         $nocache = $nocachable = 0;
283
284         $url = PLUGIN_AMAZON_XML . $asin;
285
286         if (file_exists(CACHE_DIR) === FALSE || is_writable(CACHE_DIR) === FALSE) $nocachable = 1; // ¥­¥ã¥Ã¥·¥åÉԲĤξì¹ç
287
288         if (($title = plugin_amazon_cache_title_fetch(CACHE_DIR)) == FALSE) {
289                 $nocache = 1; // ¥­¥ã¥Ã¥·¥å¸«¤Ä¤«¤é¤º
290                 $body    = plugin_amazon_get_page($url); // ¤·¤«¤¿¤Ê¤¤¤Î¤Ç¼è¤ê¤Ë¤¤¤¯
291                 $tmpary  = array();
292                 $body    = mb_convert_encoding($body, SOURCE_ENCODING, 'UTF-8');
293                 preg_match('/<ProductName>([^<]*)</', $body, $tmpary);
294                 $title     = trim($tmpary[1]);
295 //              $tmpary[1] = '';
296 //              preg_match('#<ImageUrlMedium>http://images-jp.amazon.com/images/P/[^.]+\.(..)\.#',
297 //                      $body, $tmpary);
298 //              if ($tmpary[1] != '') {
299 //                      $asin_ext = $tmpary[1];
300 //                      $asin_all = $asin . $asin_ext;
301 //              }
302         }
303
304         if ($title == '') {
305                 return '';
306         } else {
307                 if ($nocache == 1 && $nocachable != 1)
308                         plugin_amazon_cache_title_save($title, CACHE_DIR);
309                 return $title;
310         }
311 }
312
313 // ¥¿¥¤¥È¥ë¥­¥ã¥Ã¥·¥å¤¬¤¢¤ë¤«Ä´¤Ù¤ë
314 function plugin_amazon_cache_title_fetch($dir)
315 {
316         global $asin, $asin_ext, $asin_all;
317
318         $filename = $dir . 'ASIN' . $asin . '.tit';
319
320         $get_tit = 0;
321         if (! is_readable($filename)) {
322                 $get_tit = 1;
323         } elseif (PLUGIN_AMAZON_EXPIRE_TITLECACHE * 3600 * 24 < time() - filemtime($filename)) {
324                 $get_tit = 1;
325         }
326
327         if ($get_tit) return FALSE;
328
329         if (($fp = @fopen($filename, 'r')) === FALSE) return FALSE;
330         $title = fgets($fp, 4096);
331 //      $tmp_ext = fgets($fp, 4096);
332 //      if ($tmp_ext != '') $asin_ext = $tmp_ext;
333         fclose($fp);
334
335         if (strlen($title) > 0) {
336                 return $title;
337         } else {
338                 return FALSE;
339         }
340 }
341
342 // ²èÁü¥­¥ã¥Ã¥·¥å¤¬¤¢¤ë¤«Ä´¤Ù¤ë
343 function plugin_amazon_cache_image_fetch($dir)
344 {
345         global $asin, $asin_ext, $asin_all;
346
347         $filename = $dir . 'ASIN' . $asin . '.jpg';
348
349         $get_img = 0;
350         if (! is_readable($filename)) {
351                 $get_img = 1;
352         } elseif (PLUGIN_AMAZON_EXPIRE_IMAGECACHE * 3600 * 24 < time() - filemtime($filename)) {
353                 $get_img = 1;
354         }
355
356         if ($get_img) {
357                 $url = 'http://images-jp.amazon.com/images/P/' . $asin . '.' . $asin_ext . '.MZZZZZZZ.jpg';
358                 if (! is_url($url)) return FALSE;
359
360                 $body = plugin_amazon_get_page($url);
361                 if ($body != '') {
362                         $tmpfile = $dir . 'ASIN' . $asin . '.jpg.0';
363                         $fp = fopen($tmpfile, 'wb');
364                         fwrite($fp, $body);
365                         fclose($fp);
366                         $size = getimagesize($tmpfile);
367                         unlink($tmpfile);
368                 }
369                 if ($body == '' || $size[1] <= 1) { // Ä̾ï¤Ï1¤¬Ê֤뤬ǰ¤Î¤¿¤á0¤Î¾ì¹ç¤â(reimy)
370                         // ¥­¥ã¥Ã¥·¥å¤ò PLUGIN_AMAZON_NO_IMAGE ¤Î¥³¥Ô¡¼¤È¤¹¤ë
371                         if ($asin_ext == '09') {
372                                 $url = 'http://images-jp.amazon.com/images/P/' . $asin . '.01.MZZZZZZZ.jpg';
373                                 $body = plugin_amazon_get_page($url);
374                                 if ($body != '') {
375                                         $tmpfile = $dir . 'ASIN' . $asin . '.jpg.0';
376                                         $fp = fopen($tmpfile, 'wb');
377                                         fwrite($fp, $body);
378                                         fclose($fp);
379                                         $size = getimagesize($tmpfile);
380                                         unlink($tmpfile);
381                                 }
382                         }
383                         if ($body == '' || $size[1] <= 1) {
384                                 $fp = fopen(PLUGIN_AMAZON_NO_IMAGE, 'rb');
385                                 if (! $fp) return FALSE;
386                                 
387                                 $body = '';
388                                 while (! feof($fp)) $body .= fread($fp, 4096);
389                                 fclose ($fp);
390                         }
391                 }
392                 plugin_amazon_cache_image_save($body, CACHE_DIR);
393         }
394         return $filename;
395 }
396
397 // Save title cache
398 function plugin_amazon_cache_title_save($data, $dir)
399 {
400         global $asin, $asin_ext, $asin_all;
401
402         $filename = $dir . 'ASIN' . $asin . '.tit';
403         $fp = fopen($filename, 'w');
404         fwrite($fp, $data);
405         fclose($fp);
406
407         return $filename;
408 }
409
410 // Save image cache
411 function plugin_amazon_cache_image_save($data, $dir)
412 {
413         global $asin, $asin_ext, $asin_all;
414
415         $filename = $dir . 'ASIN' . $asin . '.jpg';
416         $fp = fopen($filename, 'wb');
417         fwrite($fp, $data);
418         fclose($fp);
419
420         return $filename;
421 }
422
423 // Save book data
424 function plugin_amazon_review_save($page, $data)
425 {
426         global $asin, $asin_ext, $asin_all;
427
428         $filename = DATA_DIR . encode($page) . '.txt';
429         if (! is_readable($filename)) {
430                 $fp = fopen($filename, 'w');
431                 fwrite($fp, $data);
432                 fclose($fp);
433                 return TRUE;
434         } else {
435                 return FALSE;
436         }
437 }
438
439 function plugin_amazon_get_page($url)
440 {
441         $data = http_request($url);
442         return ($data['rc'] == 200) ? $data['data'] : '';
443 }
444
445 // is ASIN?
446 function is_asin()
447 {
448         global $asin, $asin_ext, $asin_all;
449
450         $tmpary = array();
451         if (preg_match('/^([A-Z0-9]{10}).?([0-9][0-9])?$/', $asin_all, $tmpary) == FALSE) {
452                 return FALSE;
453         } else {
454                 $asin     = $tmpary[1];
455                 $asin_ext = isset($tmpary[2]) ? $tmpary[2] : '';
456                 if ($asin_ext == '') $asin_ext = '09';
457                 $asin_all = $asin . $asin_ext;
458                 return TRUE;
459         }
460 }
461 ?>