public function testProductDetailsAreExtractedCorrectly()
 {
     $search_results_fixture = new stdClass();
     $search_results_fixture->body = '
   <div id="atfResults">
     <ul>
       <li>
       <fig>
         <article class="acs-carousel-header"></article>
         </fig>
       </li>
       <li>
         <img class="s-access-image" src="/latte-cup.jpg" />
         <a href="/latte-cup" class="s-access-detail-page">
           <h2>Best latte cup</h2>
         </a>
         <span class="s-price">$12.05</span>
       </li>
     </ul>
   </div>
 ';
     $product_page_fixture = new stdClass();
     $product_page_fixture->body = "\n      <div id=\"productDescription\">\n        <p>\n            <div><img src=\"/some/image.jpg\" /></div>\n            <p style=\"margin: 1em\">\t \n </p>\n            <p>The best latte cup you will ever drink latte from. Period.</p>\n        </p>\n      </div>\n    ";
     $Http = m::mock('Requests_Session');
     // Mock HTTP request to product page
     $Http->shouldReceive('get')->with('/latte-cup')->once()->andReturn($product_page_fixture);
     // Mock HTTP request to search results
     $Http->shouldReceive('get')->once()->andReturn($search_results_fixture);
     $Amazon = new Amazon($Http);
     $Product = $Amazon->findOneProductByKeyword('latte cup');
     assertThat($Product->title, is('Best latte cup'));
     assertThat($Product->price, is('$12.05'));
     assertThat($Product->image_uri, is('/latte-cup.jpg'));
     assertThat($Product->description, is('<p>The best latte cup you will ever drink latte from. Period. </p>'));
 }
<?php

require __DIR__ . '/../vendor/autoload.php';
use Sergeylukin\AmazonProductSearch as Amazon;
$app = new \Slim\Slim();
$app->get('/api/v1/product', function () use($app) {
    try {
        $Product = Amazon::factory()->findOneProductByKeyword($app->request->get('keyword'));
        // send response header for JSON content type
        $app->response()->header('Content-Type', 'application/json');
        echo json_encode((array) $Product);
    } catch (Exception $e) {
        $app->response()->status(400);
        $app->response()->header('X-Status-Reason', $e->getMessage());
    }
});
$app->run();