added a thing to get product data for UPC-A codes using upcdatabase.com
authorOwen Smith <owen@omsmith.ca>
Mon, 19 Nov 2012 00:45:13 +0000 (19:45 -0500)
committerOwen Smith <owen@omsmith.ca>
Mon, 19 Nov 2012 00:45:13 +0000 (19:45 -0500)
.gitignore
www/upc.php [new file with mode: 0644]

index de9f180..b516d44 100644 (file)
@@ -1,2 +1,3 @@
 .sass-cache
 *.swp
+www/upc_cache
diff --git a/www/upc.php b/www/upc.php
new file mode 100644 (file)
index 0000000..a1cb2b4
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+
+/*
+ * Script expects a 12-digit UPC-A code ( leading and check digit included )
+ */
+
+// PEAR Package XML_RPC
+require_once 'XML/RPC.php';
+
+if( isset( $_REQUEST['upc'] ) ) {
+       $upc = $_REQUEST['upc'];
+
+       if( strlen( $upc ) === 12 && is_numeric( $upc ) ) {
+               echo lookup( $upc );
+       }
+}
+
+function lookup( $upc ) {
+       $cache_dir = dirname( __FILE__ ) . '/upc_cache/';
+       $filename = $cache_dir . $upc;
+
+       if( is_readable( $filename ) ) {
+               return file_get_contents( $filename );
+       }
+
+       $data = rpc_lookup( $upc );
+
+       $relevant_data = array(
+               'name' => $data['description'],
+               'size' => $data['size']
+               );
+
+       $json = json_encode( $relevant_data );
+
+       file_put_contents( $filename, $json );
+
+       return $json;
+}
+
+function rpc_lookup( $upc ) {
+       return _request( 'lookup', $upc );
+}
+
+function _request( $method, $value ) {
+       $rpc_key = '00000.....00000';
+
+       $client = new XML_RPC_Client( '/xmlrpc', 'http://www.upcdatabase.com' );
+
+       $value_key = $method === 'convertUPCE'
+               ? 'upce'
+               : 'upc';
+
+       $params = array(
+               new XML_RPC_Value(
+                       array(
+                               'rpc_key' => new XML_RPC_Value( $rpc_key, 'string' ),
+                               $value_key => new XML_RPC_Value( $value, 'string' ),
+                               ),
+                       'struct'
+                       )
+               );
+
+       $msg = new XML_RPC_Message( $method, $params );
+
+       $resp = $client->send( $msg );
+
+       // If there was a problem sending the message, the resp will be false
+       if( !$resp )
+       {
+               //print the error code from the client and exit
+               echo 'Communication error: ' . $client->errstr;
+               exit;
+       }
+       
+       if( !$resp->faultCode() )
+       {
+               // Store the value of the response in a variable
+               $val = $resp->value();
+               // Decode the value, into an array.
+               $data = XML_RPC_decode( $val );
+
+               return $data;
+       }
+
+       echo 'Fault Code: ' . $resp->faultCode() . "\n";
+       echo 'Fault Reason: ' . $resp->faultString() . "\n";
+       exit;
+}