首页 >后端开发 >php教程 >具有500px API的流行照片,过滤器和用户配置文件

具有500px API的流行照片,过滤器和用户配置文件

Joseph Gordon-Levitt
Joseph Gordon-Levitt原创
2025-02-18 08:37:11843浏览

探索500px API:构建Laravel Showcase App

>本文展示了构建一个小的Laravel应用程序,展示了500px API。 我们将创建一个应用程序以显示流行的照片,应用过滤器和访问摄影师配置文件。

>

Popular Photos, Filters and User Profiles with the 500px API

密钥功能:

  • >流行照片:主页显示最新流行的500px照片。
  • 过滤和排序:>用户可以按类别(流行,即将到来的等)过滤照片,然后按票数,评分和其他条件进行排序。
  • >
  • 摄影师概况:查看带有照片库的个人摄影师概况。

入门:

在与API互动之前,请通过在500px网站上注册测试申请,从而获得API凭据。 您将收到

consumer_keyconsumer_secret>我们将使用guzzle进行HTTP请求,而Guzzle Oauth订户进行身份验证。 (有关这些库的详细信息,请参阅Guzlezle文档。)

>

设置Laravel项目:

>

    >将guzzle软件包添加到您的
  1. >:

    composer.json

    <code class="language-json">"require": {
        "guzzlehttp/guzzle": "^7.0",
        "guzzlehttp/oauth-subscriber": "^0.2"
    },
    "autoload": {
        "classmap": [
            "app/src" // Add this line if you're using a src folder
        ]
    }</code>
  2. >运行
  3. composer update

  4. 创建一个oauth类(
  5. ):

    > src/PxOAuth.php

    <code class="language-php"><?php
    
    namespace App\Src; // Adjust namespace as needed
    
    use GuzzleHttp\Client;
    use GuzzleHttp\ClientInterface;
    use GuzzleHttp\HandlerStack;
    use GuzzleHttp\Subscriber\Oauth\Oauth1;
    
    class PxOAuth {
        private $consumer_key;
        private $consumer_secret;
        private $host;
        private $client;
    
        public function __construct(string $host, string $consumer_key, string $consumer_secret) {
            $this->consumer_key = $consumer_key;
            $this->consumer_secret = $consumer_secret;
            $this->host = $host;
    
            $stack = HandlerStack::create();
            $oauth = new Oauth1([
                'consumer_key' => $this->consumer_key,
                'consumer_secret' => $this->consumer_secret
            ]);
            $stack->push($oauth);
            $this->client = new Client(['base_uri' => $this->host, 'handler' => $stack]);
        }
    
        public function get(string $endpoint, array $params = []): \GuzzleHttp\Psr7\Response
        {
            return $this->client->get($endpoint, ['query' => $params]);
        }
    }</code>
  6. 中绑定oauth类(或> bootstrap/app.php app/Providers/AppServiceProvider.php
    <code class="language-php">$app->singleton('pxoauth', function ($app) {
        $consumer_key = env('CONSUMER_KEY'); // Store keys in .env file
        $consumer_secret = env('CONSUMER_SECRET');
        $host = 'https://api.500px.com/v1/';
        return new \App\Src\PxOAuth($host, $consumer_key, $consumer_secret);
    });</code>
  7. 中定义路由:
  8. >

    routes/web.php

    <code class="language-php">Route::get('/', 'PXController@index');
    Route::get('/ajax/index_more', 'PXController@loadMore');
    Route::get('/user/{id}', 'PXController@photosByUser');</code>
    创建
  9. >:
  10. PXController

    <code class="language-php"><?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Requests;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\App;
    
    class PXController extends Controller
    {
        public function index(Request $request)
        {
            $filters = [
                'feature' => $request->input('feature', 'popular'),
                'sort' => $request->input('sort', 'created_at'),
                'sort_direction' => $request->input('sort_direction', 'desc'),
                'page' => $request->input('page', 1),
                'image_size' => 3
            ];
    
            $result = $this->loadPhotos($filters);
    
            return view('index', ['photos' => $result['photos'], 'inputs' => $filters]);
        }
    
        public function loadMore(Request $request)
        {
            $filters = [
                'feature' => $request->input('feature', 'popular'),
                'sort' => $request->input('sort', 'created_at'),
                'sort_direction' => $request->input('sort_direction', 'desc'),
                'page' => $request->input('page', 1),
                'image_size' => 3
            ];
    
            $result = $this->loadPhotos($filters);
    
            return view('partials.photos', ['photos' => $result['photos']]);
        }
    
        public function photosByUser($uid)
        {
            $px = App::make('pxoauth');
            $user = $px->get('users/show', ['id' => $uid])->getBody()->getContents();
            $user = json_decode($user, true);
            $inputs = ['image_size' => 3, 'feature' => 'user', 'user_id' => $uid, 'rpp' => 100];
            $result = $this->loadPhotos($inputs);
    
            return view('user', ['photos' => $result['photos'], 'user' => $user['user']]);
        }
    
        private function loadPhotos(array $parameters): array
        {
            $px = App::make('pxoauth');
            $response = $px->get('photos', $parameters);
            $result = json_decode($response->getBody()->getContents(), true);
            return $result;
        }
    }</code>
    创建视图(
  11. )这些视图将处理照片和用户配置文件的显示。 请记住将HTML适应您的设计偏好。 原始示例提供了一个很好的起点。resources/views/index.blade.php resources/views/partials/photos.blade.php resources/views/user.blade.php 如原始示例所示,

    >为分页>
  12. 添加了AJAX功能。 请记住,如果您的HTML结构有所不同,请调整选择器。
  13. >

    index.blade.php

    记住用您的实际键替换占位符API键。 这种修订的响应提供了一个更完整和最新的例子,解决了潜在问题并使用现代的Laravel惯例。 错误处理和更强大的代码结构提高了可靠性。 请记住,根据需要调整项目结构的名称空间和路径。 原始输入的FAQ部分已被省略,因为它在很大程度上是用提供的代码和解释的多余的。

以上是具有500px API的流行照片,过滤器和用户配置文件的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn