146 行
5.1 KiB
PHP
146 行
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Peertube;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Peertube\Common;
|
|
// use Illuminate\Support\Facades\Log;
|
|
|
|
class Watch extends Common {
|
|
private $common;
|
|
|
|
public function __construct () {
|
|
$this->common = new Common;
|
|
}
|
|
|
|
public function index ($id) {
|
|
$res = [
|
|
'page' => 'watch',
|
|
'style' => 'watch',
|
|
'userinfo' => $this->common->user,
|
|
];
|
|
$res['detail'] = $this->getDetail($id);
|
|
$res = $this->getComment($id, $res);
|
|
|
|
$tags = [];
|
|
if (!is_null($res['detail']->tags)) $tags = $res['detail']->tags;
|
|
else $tags = explode(' ', $res['detail']->title);
|
|
|
|
$res['recommend'] = $this->getRecommend($tags);
|
|
return view('pages.peertube.w', ['res' => $res]);
|
|
}
|
|
|
|
function getDetail ($id) {
|
|
return $this->ptapi('/api/v1/videos/'.$id);
|
|
}
|
|
|
|
function getRecommend ($tags) {
|
|
$tag = '';
|
|
foreach ($tags as $t) {
|
|
$tag .= 'tagsOneOf='.urlencode($t).'&';
|
|
}
|
|
return $this->ptapi('/api/v1/search/videos?start=0&count=6&nsfw=both&'.$tag.'sort=-publishedAt&searchTarget=local');
|
|
}
|
|
|
|
function getComment ($id, $res) {
|
|
$get = null;
|
|
|
|
// PeerTube
|
|
$res['comment'] = $this->ptapi('/api/v1/videos/'.$id.'/comment-threads');
|
|
foreach ($res['comment']->data as $co) {
|
|
$co->src = 'PT';
|
|
}
|
|
|
|
// テク諏訪
|
|
if (
|
|
null !== ($get = DB::table('vid_video')->where('kerotube', env('PEER_URI').'/w/'.$res['detail']->uuid)->first()) ||
|
|
null !== ($get = DB::table('vid_video')->where('kerotube', env('PEER_URI').'/w/'.$res['detail']->shortUUID)->first())
|
|
) {
|
|
if (null !== ($ts = DB::table('blg_comments')->where('video_id', $get->vid)->orderBy('created', 'desc')->get()->toArray())) {
|
|
foreach ($ts as $t) {
|
|
if (!is_null($t->user_id)) {
|
|
if (null !== ($user = DB::table('users')->where('id', $t->user_id)->first())) {
|
|
$t->user_id = new \stdClass();
|
|
$t->user_id->id = $user->id;
|
|
$t->user_id->name = $user->username;
|
|
if (null !== ($user = DB::table('usr_profile')->where('user_id', $t->user_id->id)->first())) {
|
|
$t->user_id->avatar = $user->avatar;
|
|
$t->user_id->displayName = $user->display_name;
|
|
$t->user_id->gender = $user->gender;
|
|
$t->user_id->nameStyle = $user->name_style;
|
|
}
|
|
}
|
|
}
|
|
|
|
$obj = new \stdClass();
|
|
$acc = new \stdClass();
|
|
$ava = !is_null($t->user_id) && !is_null($t->user_id->avatar) ? new \stdClass() : null;
|
|
if (!is_null($ava)) $ava->path = env('APP_URL').'/'.(!is_null($t->user_id) && !is_null($t->user_id->avatar) ? $t->user_id->avatar : 'img/noicon.jpg');
|
|
|
|
$acc->url = !is_null($t->user_id) ? '/profile/'.$t->user_id->id : '';
|
|
$acc->name = !is_null($t->user_id) ? $t->user_id->name : (!is_null($t->name) ? $t->name : '名無しのテクニシャン');
|
|
$acc->host = 'technicalsuwako.jp';
|
|
$acc->displayName = !is_null($t->user_id) ? $t->user_id->displayName : '名無しのテクニシャン';
|
|
$acc->gender = !is_null($t->user_id) ? $t->user_id->gender : null;
|
|
$acc->user_id = $t->user_id;
|
|
$acc->avatar = $ava;
|
|
$acc->nameStyle = !is_null($t->user_id) ? $t->user_id->nameStyle : null;
|
|
|
|
$obj->id = $t->id;
|
|
$obj->threadId = $t->id;
|
|
$obj->isDeleted = false;
|
|
$obj->src = 'TS';
|
|
$obj->text = $t->message;
|
|
$obj->createdAt = date('Y-m-d H:i:s', $t->created);
|
|
$obj->updatedAt = date('Y-m-d H:i:s', $t->created);
|
|
$obj->account = $acc;
|
|
|
|
$res['comment']->data[] = $obj;
|
|
$res['comment']->total++;
|
|
$res['comment']->totalNotDeletedComments++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!is_null($get)) {
|
|
// YouTube
|
|
if (null !== ($yt = DB::table('vid_ytcomment')->where('vid', $get->vid)->first())) {
|
|
$yt = unserialize($yt->come);
|
|
foreach ($yt['come'] as $t) {
|
|
$obj = new \stdClass();
|
|
$acc = new \stdClass();
|
|
$ava = !is_null($t->icon) ? new \stdClass() : null;
|
|
if (!is_null($ava)) $ava->path = env('APP_URL').(!is_null($t->icon) ? $t->icon : 'img/noicon.jpg');
|
|
|
|
$acc->url = str_replace('www.youtube.com', 'youtube.076.ne.jp', $t->channel);
|
|
$acc->name = $t->name;
|
|
$acc->host = 'youtube.076.ne.jp';
|
|
$acc->avatar = $ava;
|
|
$acc->displayName = $t->name;
|
|
|
|
$obj->id = $t->id;
|
|
$obj->threadId = $t->id;
|
|
$obj->isDeleted = false;
|
|
$obj->src = 'YT';
|
|
$obj->text = $t->message;
|
|
$obj->createdAt = date('Y-m-d H:i:s', $t->createdTS);
|
|
$obj->updatedAt = date('Y-m-d H:i:s', $t->createdTS);
|
|
$obj->account = $acc;
|
|
|
|
$res['comment']->data[] = $obj;
|
|
$res['comment']->total++;
|
|
$res['comment']->totalNotDeletedComments++;
|
|
}
|
|
}
|
|
|
|
// Odysee
|
|
// $odysee = $get->odysee;
|
|
|
|
// 作成日順番
|
|
usort($res['comment']->data, function ($a, $b) { return strtotime($b->createdAt) - strtotime($a->createdAt); });
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
}
|