public function testParseMediaSearch() { // Get sample response $sampleResponse = $this->sampleResponses['get-media-search.json']; $response = new Response($sampleResponse, 'json'); // Get parser $parser = new InstagramParser($response); // Parse data $parser->parseMediaSearch(); // Test posts $posts = $parser->getPosts(); $this->assertEquals(2, count($posts)); }
/** * {@inheritdoc} */ public function search(QueryInterface $query) { // Get library service $libService = $this->getLibService(); // Build request params $requestParams = array(); $qFrom = $query->getFrom(); $qTo = $query->getTo(); if (is_null($query->getHashtag())) { if (!is_null($qFrom)) { $requestParams['min_timestamp'] = $qFrom->getCreated(); } if (!is_null($qTo)) { $requestParams['max_timestamp'] = $qTo->getCreated(); } } else { if (!is_null($qFrom)) { // Return media before/newer than this min ID $paginationId = $qFrom->getPaginationId(); $paginationId = is_null($paginationId) ? $qFrom->getId() : $paginationId; $requestParams['min_tag_id'] = $paginationId; } if (!is_null($qTo)) { // Return media after/older than this max ID $paginationId = $qTo->getPaginationId(); $paginationId = is_null($paginationId) ? $qTo->getId() : $paginationId; $requestParams['max_tag_id'] = $qTo->getPaginationId(); } if (!is_null($query->getNumResults())) { $requestParams['count'] = $query->getNumResults(); } } // Build request url if (is_null($query->getHashtag())) { $requestUrl = 'media/search?'; $parseMethod = 'parseMediaSearch'; } else { $requestUrl = 'tags/' . urlencode($query->getHashtag()) . '/media/recent?'; $parseMethod = 'parseTagsMediaRecent'; } $requestUrl .= http_build_query($requestParams, null, '&', PHP_QUERY_RFC3986); // Search api try { $response = new Response($libService->request($requestUrl), 'json'); } catch (\Exception $e) { $this->propogateException($e); } // Parse response $parser = new InstagramParser($response); $parser->{$parseMethod}(); $posts = $parser->getPosts(); // Filter posts $filteredPosts = array(); if (!is_null($query->getMedia())) { $mediaTypes = array(); foreach ($query->getMedia() as $media) { switch ($media) { case 'images': $mediaTypes[] = 'image'; break; case 'videos': $mediaTypes[] = 'video'; break; } } foreach ($posts as $i => $post) { if (in_array($post->getMediaType(), $mediaTypes)) { $filteredPosts[$i] = $post; } } } else { $filteredPosts = $posts; } return $filteredPosts; }