このリポジトリは2023-09-09にアーカイブされています。 ファイルの閲覧とクローンは可能ですが、プッシュ、イシューの作成、プルリクエストはできません。
LightPeer/app/Http/Controllers/Search.php

71 行
3.6 KiB
PHP
Raw Blame 履歴

このファイルには曖昧(ambiguous)なUnicode文字が含まれています

このファイルには、他の文字と見間違える可能性があるUnicode文字が含まれています。 それが意図的なものと考えられる場合は、この警告を無視して構いません。 それらの文字を表示するにはエスケープボタンを使用します。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Common;
// use Illuminate\Support\Facades\Log;
class Search extends Common {
private $common;
private $res;
public $filter = [];
public function __construct () {
$this->common = new Common;
$this->res = [
'page' => 'search',
'style' => 'search',
'userinfo' => $this->common->user,
'version' => $this->common->version,
];
}
public function index (Request $r) {
$this->updateFilter($r->all());
$filter = $this->formatFilter();
$this->res['searchterm'] = $this->filter['search'];
$this->res['res'] = [];
$this->res['res']['video-channels'] = $this->get('video-channels', 0, 2, $filter);
$this->res['res']['video-playlists'] = $this->get('video-playlists', 0, 2, $filter);
$this->res['res']['videos'] = $this->get('videos', 0, 2, $filter);
$this->res['totalres'] = 0;
foreach ($this->res['res'] as $v) $this->res['totalres'] += $v->total;
return view('pages.peertube.search', ['res' => $this->res]);
}
public function updateFilter ($v) {
$this->filter['search'] = isset($v['search']) ? $v['search'] : '';
$this->filter['searchTarget'] = 'local';
$this->filter['sort'] = isset($v['sort']) ? '-'.$v['sort'] : '-match'; // 並び替え、match | publishedAt | views
$this->filter['isLive'] = isset($v['isLive']) ? $v['isLive'] : null; // 表示、null | true | false
$this->filter['nsfw'] = isset($v['nsfw']) ? $v['nsfw'] : null; // センシティブなコンテンツを表示、both | false
$this->filter['startDate'] = isset($v['startDate']) ? $v['startDate'] : null; // 投稿日、null | フォーマット「yyyy-mm-ddT15:00:000Z」
$this->filter['originallyPublishedStartDate'] = isset($v['originallyPublishedStartDate']) ? $v['originallyPublishedStartDate'] : null; // 動画が投稿された年→から、フォーマット「yyyy-12-31T15:00:000.Z」
$this->filter['originallyPublishedEndDate'] = isset($v['originallyPublishedEndDate']) ? $v['originallyPublishedEndDate'] : null; // 動画が投稿された年→まで、フォーマット「yyyy-12-31T15:00:000.Z」
$this->filter['durationMin'] = isset($v['durationMin']) ? $v['durationMin'] : null; // 再生時間、中間の場合240、長いの場合600
$this->filter['durationMax'] = isset($v['durationMax']) ? $v['durationMax'] : null; // 再生時間、短いの場合240、中間の場合600
$this->filter['categoryOneOf'] = isset($v['categoryOneOf']) ? $v['categoryOneOf'] : null; // カテゴリ、カテゴリのINT
$this->filter['licenseOneOf'] = isset($v['licenseOneOf']) ? $v['licenseOneOf'] : null; // ライセンス、ライセンスのINT
$this->filter['languageOneOf'] = isset($v['languageOneOf']) ? $v['languageOneOf'] : null; // 言語、2文字言語コード
$this->filter['tagsOneOf'] = isset($v['tagsOneOf']) ? $v['tagsOneOf'] : null; // これらのタグ全て、単語(複数場合:&tagsOneOf=sa1&tagsOneOf=sa2)
$this->filter['tagsAllOf'] = isset($v['tagsAllOf']) ? $v['tagsAllOf'] : null; // これらのタグのうち1つ、単語(複数場合:&tagsAllOf=sa1&tagsAllOf=sa2)
$this->filter['host'] = isset($v['host']) ? $v['host'] : null; // インスタンス、ドメイン名
}
function formatFilter () {
$filter = '';
foreach ($this->filter as $k => $v) {
if (!is_null($v)) $filter .= '&'.$k.'='.$v;
}
return $filter;
}
function get ($type, $start, $count, $filter) {
return $this->ptapi('/api/v1/search/'.$type.'?start='.$start.'&count='.$count.$filter);
}
}