+++ /dev/null
-<?php
-
-/**
-* Instagram PHP
-* @author Galen Grover <galenjr@gmail.com>
-* @license http://opensource.org/licenses/mit-license.php The MIT License
-*/
-
-namespace Instagram\Core;
-
-/**
- * Proxy
- *
- * This class performs all the API calls
- *
- * It uses the supplied HTTP client as a default (cURL)
- *
- */
-class Proxy {
-
- /**
- * HTTP Client
- *
- * @var \Instagram\Net\ClientInterface
- * @access protected
- */
- protected $client;
-
- /**
- * Instagram access token
- *
- * @var string
- * @access protected
- */
- protected $access_token = null;
-
- /**
- * Client ID
- *
- * @var string
- * @access protected
- */
- protected $client_id = null;
-
- /**
- * API URL
- *
- * @var string
- * @access protected
- */
- protected $api_url = 'https://api.instagram.com/v1';
-
- /**
- * Constructor
- *
- * @param \Instagram\Net\ClientInterface $client HTTP Client
- * @param string $access_token The access token from authentication
- * @access public
- */
- public function __construct( \Instagram\Net\ClientInterface $client, $access_token = null ) {
- $this->client = $client;
- $this->access_token = $access_token;
- }
-
- /**
- * Get the access token
- *
- * @param array $data Auth data
- * @return string Returns the access token
- */
- public function getAccessToken( array $data ) {
- $response = $this->apiCall(
- 'post',
- 'https://api.instagram.com/oauth/access_token',
- $data
- );
- return $response;
- }
-
- /**
- * Set the access token
- *
- * @param string $access_token The access token
- * @access public
- */
- public function setAccessToken( $access_token ) {
- $this->access_token = $access_token;
- }
-
- /**
- * Set the client ID
- *
- * @param string $client_id the client ID
- * @access public
- */
- public function setClientID( $client_id ) {
- $this->client_id = $client_id;
- }
-
- /**
- * Logout of instagram
- *
- * This hasn't been implemented by instagram yet
- *
- * @access public
- */
- public function logout() {
- $this->client->get( 'https://instagram.com/accounts/logout/', array() );
- }
-
- /**
- * Get the media associated with an object
- *
- * This function is used by the individual object functions
- * getLocationMedia, getTagMedia, atc...
- *
- * @param string $api_endpoint API endpoint for the object type
- * @param string $id Id of the object to get the media for
- * @param array $params Extra parameters for the API call
- * @return StdClass Returns the raw response
- * @access protected
- */
- protected function getObjectMedia( $api_endpoint, $id, array $params = null ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/%s/%s/media/recent', $this->api_url, strtolower( $api_endpoint ), $id ),
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get location media
- *
- * @param string $id Location ID
- * @param array $params Extra params to pass to the API
- * @return StdClass Returns the location media
- * @access public
- */
- public function getLocationMedia( $id, array $params = null ) {
- return $this->getObjectMedia( 'Locations', $id, $params );
- }
-
- /**
- * Get tag media
- *
- * @param string $id Location ID
- * @param array $params Extra params to pass to the API
- * @return StdClass Returns the location media
- * @access public
- */
- public function getTagMedia( $id, array $params = null ) {
- return $this->getObjectMedia( 'Tags', $id, $params );
- }
-
- /**
- * Get user media
- *
- * @param string $id Location ID
- * @param array $params Extra params to pass to the API
- * @return StdClass Returns the location media
- * @access public
- */
- public function getUserMedia( $id, array $params = null ) {
- return $this->getObjectMedia( 'Users', $id, $params );
- }
-
- /**
- * Get user
- *
- * @param string $id User ID
- * @return StdClass Returns the user data
- * @access public
- */
- public function getUser( $id ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/users/%s', $this->api_url, $id )
- );
- return $response->getData();
- }
-
- /**
- * Get a user's follows
- *
- * @param string $id User's ID
- * @param array $params Extra params to pass to the API
- * @return StdClass Returns the user's followers
- * @access public
- */
- public function getUserFollows( $id, array $params = null ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/users/%s/follows', $this->api_url, $id ),
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get a user's followers
- *
- * @param string $id User's ID
- * @param array $params Extra params to pass to the API
- * @return StdClass Returns the user's followers
- * @access public
- */
- public function getUserFollowers( $id, array $params = null ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/users/%s/followed-by', $this->api_url, $id ),
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get media comments
- *
- * @param string $id Media ID
- * @return StdClass Returns the media data
- * @access public
- */
- public function getMediaComments( $id ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/media/%s/comments', $this->api_url, $id )
- );
- return $response->getRawData();
- }
-
- /**
- * Get media likes
- *
- * @param string $id Media ID
- * @return StdClass Returns the media likes
- * @access public
- */
- public function getMediaLikes( $id ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/media/%s/likes', $this->api_url, $id )
- );
- return $response->getRawData();
- }
-
- /**
- * Get media comments
- *
- * @return StdClass Returns the current user data
- * @access public
- */
- public function getCurrentUser() {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/users/self', $this->api_url )
- );
- return $response->getData();
- }
-
- /**
- * Get media
- *
- * @param string $id Media ID
- * @return StdClass Returns the media data
- * @access public
- */
- public function getMedia( $id ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/media/%s', $this->api_url, $id )
- );
- return $response->getData();
- }
-
- /**
- * Get tag
- *
- * @param string $id Tag ID
- * @return StdClass Returns the tag data
- * @access public
- */
- public function getTag( $tag ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/tags/%s', $this->api_url, $tag )
- );
- return $response->getData();
- }
-
- /**
- * Get location
- *
- * @param string $id Location ID
- * @return StdClass Returns the location data
- * @access public
- */
- public function getLocation( $id ) {
- $response = $this->apiCall(
- 'get',
- sprintf( '%s/locations/%s', $this->api_url, $id )
- );
- return $response->getData();
- }
-
- /**
- * Search users
- *
- * @param array $params Search params
- * @return array Returns an array of user data
- * @access public
- */
- public function searchUsers( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/users/search',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Search tags
- *
- * @param array $params Search params
- * @return array Returns an array of tag data
- * @access public
- */
- public function searchTags( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/tags/search',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Search media
- *
- * @param array $params Search params
- * @return array Returns an array of media data
- * @access public
- */
- public function searchMedia( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/media/search',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Search locations
- *
- * @param array $params Search params
- * @return array Returns an array of location data
- * @access public
- */
- public function searchLocations( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/locations/search',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get popular media
- *
- * @param array $params Extra params
- * @return array Returns an array of popular media data
- * @access public
- */
- public function getPopularMedia( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/media/popular',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get the current user's feed
- *
- * @param array $params Extra params
- * @return array Returns an array of media data
- * @access public
- */
- public function getFeed( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/users/self/feed',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get the current users follow requests
- *
- * @param $params Extra params (not used in API, here in case it's added)
- * @return array Returns an array of user data
- * @access public
- */
- public function getFollowRequests( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/users/self/requested-by',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get the current user's liked media
- *
- * @param array $params Extra params
- * @return array Returns an array of media data
- * @access public
- */
- public function getLikedMedia( array $params = null ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . '/users/self/media/liked',
- $params
- );
- return $response->getRawData();
- }
-
- /**
- * Get a user's relationship to the current user
- *
- * @param string $user_id User to check relationship for
- * @return StdClass Returns the relationship
- * @access public
- */
- public function getRelationshipToCurrentUser( $user_id ) {
- $response = $this->apiCall(
- 'get',
- $this->api_url . sprintf( '/users/%s/relationship', $user_id )
- );
- return $response->getData();
- }
-
- /**
- * Modify a relationship with the current user
- * @param string $user_id User ID of the user to change the relationship for
- * @param string $relationship New relationship {@link http://instagram.com/developer/endpoints/relationships/#post_relationship}
- * @return StdClass Returns the status
- * @access public
- */
- public function modifyRelationship( $user_id, $relationship ) {
- $response = $this->apiCall(
- 'post',
- $this->api_url . sprintf( '/users/%s/relationship', $user_id ),
- array( 'action' => $relationship )
- );
- return $response->getData();
- }
-
- /**
- * Add a like form the current user on a media
- *
- * @param string $media_id Media ID to like
- * @return StdClass Returns the status
- * @access public
- */
- public function like( $media_id ) {
- $this->apiCall(
- 'post',
- $this->api_url . sprintf( '/media/%s/likes', $media_id )
- );
- }
-
- /**
- * Delete a like form the current user on a media
- *
- * @param string $media_id Media ID to unlike
- * @return StdClass Returns the status
- * @access public
- */
- public function unLike( $media_id ) {
- $this->apiCall(
- 'delete',
- $this->api_url . sprintf( '/media/%s/likes', $media_id )
- );
- }
-
- /**
- * Add a comment to a media
- *
- * @param string $media_id Media ID
- * @param string $text Comment text
- * @return StdClass Returns the status
- * @access public
- */
- public function addMediaComment( $media_id, $text ) {
- $this->apiCall(
- 'post',
- $this->api_url . sprintf( '/media/%s/comments', $media_id ),
- array( 'text' => $text )
- );
- }
-
- /**
- * Delete a comment from a media
- *
- * @param string $media_id Media ID
- * @param string $comment_id Comment ID to delete
- * @return StdClass
- * @access public
- */
- public function deleteMediaComment( $media_id, $comment_id ) {
- $this->apiCall(
- 'delete',
- $this->api_url . sprintf( '/media/%s/comments/%s', $media_id, $comment_id )
- );
- }
-
- /**
- * Make a call to the API
- *
- * @param string $method HTTP method to use
- * @param string $url URL
- * @param array $params API parameters
- * @param boolean $throw_exception True to throw exceptoins
- * @throws APIException, APIAuthException
- * @return \Instagram\Net\ApiResponse Returns teh API response
- * @access private
- */
- private function apiCall( $method, $url, array $params = null, $throw_exception = true ){
-
- $raw_response = $this->client->$method(
- $url,
- array(
- 'access_token' => $this->access_token,
- 'client_id' => isset( $params['client_id'] ) ? $params['client_id'] : $this->client_id
- ) + (array) $params
- );
-
- $response = new \Instagram\Net\ApiResponse( $raw_response );
-
- if ( !$response->isValid() ) {
- if ( $throw_exception ) {
- if ( $response->getErrorType() == 'OAuthAccessTokenException' ) {
- throw new \Instagram\Core\ApiAuthException( $response->getErrorMessage(), $response->getErrorCode(), $response->getErrorType() );
- }
- else {
- throw new \Instagram\Core\ApiException( $response->getErrorMessage(), $response->getErrorCode(), $response->getErrorType() );
- }
- }
- else {
- return false;
- }
- }
- return $response;
- }
-
-
-}
\ No newline at end of file