gorse.io (Gorse - Open Source Recommender System) PHP Client

gorse.io (Gorse - Open Source Recommender System) PHP Client
<?php

namespace App\Services;

use GuzzleHttp\Client;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;

/**
 * PHP client for Gorse https://gorse.io/
 *
 * @author Bhaktaraz Bhatta <[email protected]>
 */
class GorseClient
{
    public function __construct(private ContainerBagInterface $params){}

    public function execute($url, $method, $parameters = [])
    {
        $client = new Client();
        $response = $client->request(
            $method,
            $this->params->get('georse_api_base_url') . $url,
            [
                'body' => json_encode($parameters),
                'headers' => ['Content-Type' => 'application/json', 'X-API-Key' => $this->params->get('gorse_api_key')]
            ]
        );

        return $response->getBody()->getContents();
    }

    // Item APIs

    /**
     * @param $parameters
     * @return string
     *
     * Insert an item. Overwrite if the item exists.
     */
    public function insertItem($parameters)
    {
        return $this->execute('item', 'POST', $parameters);
    }

    /**
     * @return string
     *
     * Get an item.
     */
    public function getItem($item)
    {
        return $this->execute('item/'.$item, 'GET');
    }

    /**
     * @return string
     *
     * Modify an item.
     */
    public function updateItem($item)
    {
        return $this->execute('item/'.$item, 'PATCH');
    }

    /**
     * @return string
     *
     * Delete an item and its feedbacks.
     */
    public function deleteItem($item)
    {
        return $this->execute('item/'.$item, 'DELETE');
    }

    /**
     * @return string
     *
     * Insert items. Overwrite if items exist.
     */
    public function insetItems($parameters)
    {
        return $this->execute('items', 'POST', $parameters);
    }

    /**
     * @return string
     *
     * Get items.
     */
    public function getItems()
    {
        return $this->execute('items', 'GET');
    }

    /**
     * @return string
     *
     * Append a category to an item.
     */
    public function appendCategoryToItem($item, $category)
    {
        return $this->execute('item/'.$item.'/category/'.$category, 'PUT');
    }

    /**
     * @return string
     *
     * Delete a category from an item.
     */
    public function deleteCategoryFromItem($item, $category)
    {
        return $this->execute('item/'.$item.'/category/'.$category, 'DELETE');
    }

    // User APIs

    /**
     * @param $parameters
     * @return string
     *
     * Insert a user. Overwrite if the user exists.
     */
    public function insertUser($parameters)
    {
        return $this->execute('user', 'POST', $parameters);
    }

    /**
     * @param $user
     * @return string
     *
     * Get a user.
     */
    public function getUser($user)
    {
        return $this->execute('user/'.$user, 'GET');
    }

    /**
     * @param $user
     * @param $parameters
     * @return string
     *
     * Modify a user.
     */
    public function modifyUser($user, $parameters)
    {
        return $this->execute('user/'.$user, 'PATCH', $parameters);
    }

    /**
     * @param $user
     * @return string
     *
     * Delete a user and his or her feedbacks.
     */
    public function deleteUser($user)
    {
        return $this->execute('user/'.$user, 'DELETE');
    }

    /**
     * @return string
     *
     * Get users.
     */
    public function getUsers()
    {
        return $this->execute('users', 'GET');
    }

    // Feedback APIs

    /**
     * @param $parameters
     * @return string
     *
     * Insert feedbacks. Ignore if exists.
     */
    public function insertFeedback($parameters)
    {
        return $this->execute('feedback', 'POST', $parameters);
    }

    /**
     * @param $parameters
     * @return string
     *
     * Insert feedbacks. Overwrite if exists.
     */
    public function updateFeedback($parameters)
    {
        return $this->execute('feedback', 'PUT', $parameters);
    }

    /**
     * @return string
     *
     * Get feedbacks.
     */
    public function getFeedbacks()
    {
        return $this->execute('feedback', 'GET');
    }

    /**
     * @return string
     *
     * Get feedbacks with feedback type.
     */
    public function getFeedbacksByType($type)
    {
        return $this->execute('feedback/'.$type, 'GET');
    }

    /**
     * @return string
     *
     * Get feedbacks between a user and a item.
     */
    public function getFeedbacksBetweenUserAndItem($user, $item)
    {
        return $this->execute('feedback/'.$user.'/'.$item, 'GET');
    }

    /**
     * @return string
     *
     * Delete feedbacks between a user and a item.
     */
    public function deleteFeedbacksBetweenUserAndItem($user, $item)
    {
        return $this->execute('feedback/'.$user.'/'.$item, 'DELETE');
    }

    /**
     * @return string
     *
     * Get feedbacks between a user and a item with feedback type.
     */
    public function getFeedbacksBetweenUserAndItemByFeedbackType($type, $user, $item)
    {
        return $this->execute('feedback/'.$type.'/'.$user.'/'.$item, 'GET');
    }

    /**
     * @return string
     *
     * Delete feedbacks between a user and a item with feedback type.
     */
    public function deleteFeedbacksBetweenUserAndItemByFeedbackType($type, $user, $item)
    {
        return $this->execute('feedback/'.$type.'/'.$user.'/'.$item, 'DELETE');
    }

    /**
     * @return string
     *
     * Get feedback by user id.
     */
    public function getFeedbacksByUserId($user)
    {
        return $this->execute('user/'.$user.'/feedback', 'GET');
    }

    /**
     * @return string
     *
     * Get feedbacks by user id with feedback type.
     */
    public function getFeedbacksByUserWithFeedbackType($user, $type)
    {
        return $this->execute('user/'.$user.'/feedback/'.$type, 'GET');
    }

    /**
     * @return string
     *
     * Get feedback by item id.
     */
    public function getFeedbackByItemId($item)
    {
        return $this->execute('item/'.$item.'/feedback', 'GET');
    }

    /**
     * @return string
     *
     * Get feedbacks by item id with feedback type.
     */
    public function getFeedbackByItemIdWithFeedbackType($item, $type)
    {
        return $this->execute('item/'.$item.'/feedback/'.$type, 'GET');
    }

    // Recommendation APIs

    /**
     * @return string
     *
     * Get latest items.
     */
    public function getLatestItems()
    {
        return $this->execute('latest', 'GET');
    }

    /**
     * @param $category
     * @return string
     *
     * Get latest items in specified category.
     */
    public function getLatestItemsByCategory($category): string
    {
        return $this->execute('latest/'. $category, 'GET');
    }

    /**
     * @return string
     *
     * Get popular items.
     */
    public function getPopularItems()
    {
        return $this->execute('popular', 'GET');
    }

    /**
     * @param $category
     * @return string
     *
     * Get popular items in specified category.
     */
    public function getPopularItemsByCategory($category)
    {
        return $this->execute('popular/'. $category, 'GET');
    }

    /**
     * @param $user
     * @return string
     *
     * Get recommendation for user.
     */
    public function getRecommendationForUser($user)
    {
        return $this->execute('recommend/'. $user, 'GET');
    }

    /**
     * @param $user
     * @param $category
     * @return string
     *
     * Get recommendation for user in specified category.
     */
    public function getRecommendationForUserByCategory($user, $category)
    {
        return $this->execute('recommend/'.$user.'/' . $category, 'GET');
    }

    /**
     * @param $item
     * @return string
     *
     * Get neighbors of a item.
     */
    public function getNeighborsOfItem($item)
    {
        return $this->execute('item/'.$item.'/neighbors', 'GET');
    }

    /**
     * @param $user
     * @return string
     *
     * Get neighbors of a user.
     */
    public function getNeighborsOfUser($user)
    {
        return $this->execute('user/'. $user.'/neighbors', 'GET');
    }

    /**
     * @param $item
     * @param $category
     * @return string
     *
     * Get neighbors of a item in specified category.
     */
    public function getNeighborsOfItemByCategory($item, $category): string
    {
        return $this->execute('item/'. $item.'/neighbors/'.$category, 'GET');
    }
}

 

Comment