All Projects → njasm → Soundcloud

njasm / Soundcloud

Soundcloud.com API wrapper written in PHP with OAuth2 support.

Projects that are alternatives of or similar to Soundcloud

Adrestia
APIs & SDK for interacting with Cardano.
Stars: ✭ 56 (-40.43%)
Mutual labels:  api, library
Logging Log4j2
Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems in Logback's architecture.
Stars: ✭ 1,133 (+1105.32%)
Mutual labels:  api, library
Httplive
HTTP Request & Response Service, Mock HTTP
Stars: ✭ 1,094 (+1063.83%)
Mutual labels:  api, restful
Api Strategy
Equinor API Strategy
Stars: ✭ 56 (-40.43%)
Mutual labels:  api, restful
Http restful api
整理HTTP后台端的RESTful API方面的知识
Stars: ✭ 94 (+0%)
Mutual labels:  api, restful
Webdriver Rust
Library implementing the wire protocol for the W3C WebDriver standard.
Stars: ✭ 56 (-40.43%)
Mutual labels:  api, library
Silverstripe Restfulapi
SilverStripe RESTful API with a default JSON serializer.
Stars: ✭ 63 (-32.98%)
Mutual labels:  api, restful
Python Api Development Fundamentals
Develop a full-stack web application with Python and Flask
Stars: ✭ 44 (-53.19%)
Mutual labels:  api, restful
Libgui
Buttons & Co
Stars: ✭ 78 (-17.02%)
Mutual labels:  api, library
Spring Boot Api Project Seed
🌱🚀一个基于Spring Boot & MyBatis的种子项目,用于快速构建中小型API、RESTful API项目~
Stars: ✭ 8,979 (+9452.13%)
Mutual labels:  api, restful
Hadotnet
🏡 A .NET Standard library for Home Assistant.
Stars: ✭ 52 (-44.68%)
Mutual labels:  api, library
Ccxt.net
CCXT.NET – CryptoCurrency eXchange Trading Library for .NET
Stars: ✭ 89 (-5.32%)
Mutual labels:  api, library
Flask Restx
Fork of Flask-RESTPlus: Fully featured framework for fast, easy and documented API development with Flask
Stars: ✭ 1,050 (+1017.02%)
Mutual labels:  api, restful
Discord.jl
The Julia Discord API Wrapper
Stars: ✭ 93 (-1.06%)
Mutual labels:  api, library
Generator Http Fake Backend
Yeoman generator for building a fake backend by providing the content of JSON files or JavaScript objects through configurable routes.
Stars: ✭ 49 (-47.87%)
Mutual labels:  api, restful
Best Of Web Python
🏆 A ranked list of awesome python libraries for web development. Updated weekly.
Stars: ✭ 1,118 (+1089.36%)
Mutual labels:  api, library
Hellobooks
A Single-Page Library Management App built with nodejs, express and react and redux
Stars: ✭ 37 (-60.64%)
Mutual labels:  api, library
Lara Eye
Filter your Query\Builder using a structured query language
Stars: ✭ 39 (-58.51%)
Mutual labels:  api, library
Flowa
🔥Service level control flow for Node.js
Stars: ✭ 66 (-29.79%)
Mutual labels:  api, restful
Async Gamequery Lib
A high-performance java game query library designed for steam/source based games and others
Stars: ✭ 88 (-6.38%)
Mutual labels:  api, library

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version Total Downloads License

Soundcloud.com API Wrapper in PHP

Implemented features

  • User Authorization/Authentication
  • User Credentials Flow Authentication
  • Access to all GET, PUT, POST and DELETE Resources
  • Media File Download/Upload

Requirements

PHP 5.6 or higher.

Installation

Recommended installation is through composer. Include njasm\soundcloud in your project, by adding it to your composer.json file.

{
    "require": {
        "njasm/soundcloud": "dev-master"
    }
}

If you don't use composer to manage your project dependencies, this library provides your with an autoload.php You just need to include autoload.php in your project to start using the library as you would if installed through composer.

Usage

Include Njasm\Soundcloud\ namespace in the script where you intend to use SoundcloudFacade or Soundcloud class.

use Njasm\Soundcloud\SoundcloudFacade;
// or soundcloud if you don't need a facade for specific tasks
use Njasm\Soundcloud\Soundcloud;

SoundcloudFacade.php provides you with boilerplate code to get authorization url, change a code for a token, etc etc..

Examples
Get Authorization Url.
$facade = new SoundcloudFacade($clientID, $clientSecret, $callbackUri);
$url = $facade->getAuthUrl();

// or inject your specific request params
$url = $facade->getAuthUrl(
    [
        'response_type' => 'code',
        'scope' => '*',
        'state' => 'my_app_state_code'
    ]
);
Authentication
$facade = new SoundcloudFacade($clientID, $clientSecret, $callbackUri);
// this is your callbackUri script that will receive the $_GET['code']
$code = $_GET['code'];
$facade->codeForToken($code); 

Authentication with user credentials flow.

If an access token is returned from soundcloud, it will be automatically set for future requests. The Response object will always be returned to the client.

$facade = new SoundcloudFacade($clientID, $clientSecret);
$facade->userCredentials($username, $password); // on success, access_token is set by default for next requests.
$response = $facade->get('/me')->request();
// raw/string body response
echo $response->bodyRaw();
// as object
echo $response->bodyObject()->id;
// as array
$array = $response->bodyArray();
Accept response as json or xml

Note: Soundcloud.com stopped sending responses in xml format, the methods are kept in the 2.x.x versions, but calling them will have no effect on the request, all requests will have an accept header of application/json.

...
$response  = $facade->get('/tracks')->asJson()->request();
// or
$response = $facade->get('/tracks')->asXml()->request();
Add params to resource.
// argument array style
$facade->get('/resolve', ['url' => 'http://www.soundcloud.com/hybrid-species']);

// chaining-methods
$response = $facade
    ->get('/resolve')
    ->setParams(['url' => 'http://www.soundcloud.com/hybrid-species']);

// or not
$facade->get('/resolve');
$facade->setParams(['url' => 'http://www.soundcloud.com/hybrid-species']);
Send request

To allow different ways to set the Resource parameters that you are accessing - by submitting an array or setParams() method injection. The request will only be sent to soundcloud, when you invoke the request() method. Take in considerations that specific operations like userCredentials(), download(), etc. will invoke request() automatically.

$soundcloud = new Soundcloud($clientID, $clientSecret);
$soundcloud->get('/resolve', ['url' => 'http://www.soundcloud.com/hybrid-species']);
// only this invocation will send the request
$response = $soundcloud->request();
Get the raw response Body
...
$theBodyString = $facade->request()->bodyRaw();
Create a Playlist / Set and update with tracks
// after having the access token
// build the playlist data array
$playlistData = ['playlist' => ['title' => 'Great Playlist!', 'sharing' => 'public']];
$response = $soundcloud->post('/playlists', $playlistData)->request();

// now add tracks, get playlist id from response
// build tracks array
$tracks = [
    'playlist' => [
        'tracks' => [
            ['id' => 29720509], // track id
            ['id' => 26057359]  // other track id
        ]
    ]
];

// put tracks into playlist
$response = $soundcloud->put('/playlists/' . $response->bodyObject()->id, $tracks)->request();
Get CURL last response object
// if you want the CURL response object from last CURL request.
$response = $facade->getCurlResponse();
File Download
// this will redirect user, sending a header Location to the track.
$response = $facade->download($trackID);
// redirect user to download URL suplied by soundcloud.
header('Loacation: ' . $response->getHeader('Location'));

// CAUTION: this will get the track into an in-memory variable in your server.
$response = $facade->download($trackID, true);
// save it to a file.
file_put_contents("great_track.mp3", $response->bodyRaw());
File Upload
$trackPath = '/home/njasm/great.mp3';
$trackData = [
    'title' => 'Cool track title',
    'downloadable' => true,
    'artwork_data' => new \CURLFile('artwork.jpg'),
    // .... more metadata maybe?
];

$response = $facade->upload($trackPath, $trackData);

// or old-school trackdata array declaration also work, example.
$trackData = [
    'track[title]' => 'Cool track title',
    'track[downloadable]' => true,
    'track[artwork_data]' => new \CURLFile('artwork.jpg'),
    // .... more metadata maybe?
];

$response = $facade->upload($trackPath, $trackData);
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].