w3spi5 / php-discogs-api
Discogs API让开发者轻松与Discogs平台进行通信
Requires
- php: >=7.3
- guzzlehttp/guzzle: ^7.0 || ^8.0
- guzzlehttp/guzzle-services: ^1.2
- guzzlehttp/oauth-subscriber: ^0.6
Requires (Dev)
- ext-json: *
- phpunit/phpunit: ^8.5.23 || ^9.0
Suggests
- ricbra/discogs-bundle: For integrating Discogs into Symfony 2
- w3spi5/discogs-bundle: For integrating Discogs into Symfony 5, Laravel 10
README
这个库是Discogs API v2.0的PHP 7.3 / PHP 8.x实现。Discogs API是一个基于REST的接口。使用这个库,您无需担心与API通信:所有困难的工作已经完成。
分支
在此期间 @calliostro 醒醒,我需要这个包正常工作
许可证
这个库是在MIT许可证下发布的。完整的许可证请参阅LICENSE文件。
Symfony Bundle
有关将Discogs集成到Symfony 5或Symfony 6的信息,请参阅w3spi5/discogs-bundle。
安装
首先安装composer。然后执行以下操作:
$ composer require w3spi5/php-discogs-api
需求
PHP 7.3或PHP 8.x
用法
创建一个新的实例非常简单
<?php $client = Discogs\ClientFactory::factory([]);
User-Agent
Discogs要求您提供User-Agent。您可以通过以下方式轻松完成此操作
<?php $client = Discogs\ClientFactory::factory([ 'headers' => ['User-Agent' => 'your-app-name/0.1 +https://www.awesomesite.com'], ]);
限制
Discogs不喜欢您以过高的连接速率调用他们的API。使用ThrottleSubscriber
防止出现错误或被禁止
<?php $handler = \GuzzleHttp\HandlerStack::create(); $throttle = new Discogs\Subscriber\ThrottleSubscriber(); $handler->push(\GuzzleHttp\Middleware::retry($throttle->decider(), $throttle->delay())); $client = Discogs\ClientFactory::factory(['handler'=>$handler]);
认证
Discogs API允许使用简单的Discogs Auth Flow或更高级(更复杂)的Oauth Flow访问受保护端点
Discogs认证
如Discogs认证文档中所述
为了访问受保护端点,您需要根据情况注册消费者密钥和密钥或用户令牌
- 为了轻松访问您自己的用户账户信息,请使用用户令牌。
- 为了获取访问需要认证的端点和构建第三方应用程序的访问权限,请使用消费者密钥和密钥。
使用Authorization
头
$client = ClientFactory::factory([ 'headers' => [ 'Authorization' => "Discogs key=key_here, secret=secret_here", ], ]);
使用个人访问令牌进行认证(您可以从https://www.discogs.com/settings/developers)获取)
$client = ClientFactory::factory([ 'headers' => [ 'User-Agent' => $user_agent, 'Authorization' => "Discogs token={$access_token}", ] ]);
OAuth
有很多端点需要OAuth。幸运的是,使用Guzzle这很容易。如果您在获取令牌和token_secret方面遇到困难,请查看ricbra/php-discogs-api-example。
<?php $oauth = new GuzzleHttp\Subscriber\Oauth\Oauth1([ 'consumer_key' => $consumerKey, // from Discogs developer page 'consumer_secret' => $consumerSecret, // from Discogs developer page 'token' => $token['oauth_token'], // get this using a OAuth library 'token_secret' => $token['oauth_token_secret'] // get this using a OAuth library ]); $handler = GuzzleHttp\HandlerStack::create(); $handler->push($oauth); $client = Discogs\ClientFactory::factory([ 'handler' => $handler, 'auth' => 'oauth' ]);
历史
另一个很酷的插件是History插件
<?php $container = []; $history = GuzzleHttp\Middleware::History($container); $handler = GuzzleHttp\HandlerStack::create(); $handler->push($history); $client = Discogs\ClientFactory::factory([ 'handler' => $handler ]); $response = $client->search([ 'q' => 'searchstring' ]); foreach ($container as $row) { print $row['request'] -> getMethod(); // GET print $row['request'] -> getRequestTarget(); // /database/search?q=searchstring print strval($row['request'] -> getUri()); // https://api.discogs.com/database/search?q=searchstring print $row['response'] -> getStatusCode(); // 200 print $row['response'] -> getReasonPhrase(); // OK }
更多信息及插件
有关Guzzle及其插件的更多信息,请参阅文档。
执行搜索
截至2014年8月,此端点需要签名OAuth请求。
<?php $response = $client->search([ 'q' => 'Meagashira' ]); // Loop through results foreach ($response['results'] as $result) { var_dump($result['title']); } // Pagination data var_dump($response['pagination']); // Dump all data var_dump($response->toArray());
获取标签信息
<?php $label = $client->getLabel([ 'id' => 1 ]);
获取艺术家信息
<?php $artist = $client->getArtist([ 'id' => 1 ]);
获取发行信息
<?php $release = $client->getRelease([ 'id' => 1 ]); echo $release['title']."\n";
获取主发行信息
<?php $master = $client->getMaster([ 'id' => 1 ]); echo $master['title']."\n";
获取图片
Discogs返回图片的完整URL,因此只需使用内部客户端即可获取这些图片
$release = $client->getRelease([ 'id' => 1 ]); foreach ($release['images'] as $image) { $response = $client->getHttpClient()->get($image['uri']); // response code echo $response->getStatusCode(); // image blob itself echo $client->getHttpClient()->get($image['uri'])->getBody()->getContents(); }
获取用户列表
<?php $userLists = $client->getUserLists([ 'username' => 'example', 'page' => 1, #default 'per_page' => 500 #min 1, max 500, default 50 ]);
获取列表
<?php $listItems = $client->getLists([ 'list_id' => 1 ]);
获取用户愿望列表
<?php $wantlist = $client->getWantlist([ 'username' => 'example', 'page' => 1, #default 'per_page' => 500 #min 1, max 500, default 50 ]);
用户收藏
当folder_id
不是0
时,需要授权。
获取收藏夹目录
<?php $folders = $client->getCollectionFolders([ 'username' => 'example' ]);
获取收藏夹
<?php $folder = $client->getCollectionFolder([ 'username' => 'example', 'folder_id' => 1 ]);
通过文件夹获取收藏项目
<?php $items = $client->getCollectionItemsByFolder([ 'username' => 'example', 'folder_id' => 3 ]);
列表
创建和操作列表需要您以卖家身份进行认证
创建列表
<?php $response = $client->createListing([ 'release_id' => '1', 'condition' => 'Good (G)', 'price' => 3.49, 'status' => 'For Sale' ]);
更改列表
<?php $response = $client->changeListing([ 'listing_id' => '123', 'condition' => 'Good (G)', 'price' => 3.49, ]);
删除列表
<?php $response = $client->deleteListing(['listing_id' => '123']);
批量创建列表(通过CSV)
<?php $response = $client->addInventory(['upload' => fopen('path/to/file.csv', 'r')]); // CSV format (example): // release_id,condition,price // 1,Mint (M),19.99 // 2,Near Mint (NM or M-),14.99
批量删除列表(通过CSV)
<?php $response = $client->deleteInventory(['upload' => fopen('path/to/file.csv', 'r')]); // CSV format (example): // listing_id // 123 // 213 // 321
文档
更多文档可以在Discogs API v2.0 文档中找到。
贡献
实现了缺失的功能?您可以提出请求。创建拉取请求是完成工作的更好方式。
感谢
由ricbra/php-discogs-api进行初始开发。
由AnssiAhola/php-discogs-api移植到PHP 7并添加更多Discogs API方法。
此API建立在Guzzle 7的基础上。