Compare commits
124 Commits
feature/ok
...
feature/no
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8f58fce1b0 | ||
![]() |
3420e053fc | ||
![]() |
a01bc6989e | ||
![]() |
a71aa0c3b6 | ||
![]() |
26be8a086e | ||
![]() |
af5de3ee14 | ||
![]() |
c8cee80144 | ||
![]() |
d8e170ff85 | ||
![]() |
9c101dfb7b | ||
![]() |
12fd228e75 | ||
![]() |
dc0eb0a548 | ||
![]() |
16ed4482f4 | ||
![]() |
57a847baf5 | ||
![]() |
332b6d7dd0 | ||
![]() |
99a92c6106 | ||
![]() |
4ca6f00c1b | ||
![]() |
7b8811b894 | ||
![]() |
c7e261d06b | ||
![]() |
b3c98613e7 | ||
![]() |
f7a5948e8e | ||
![]() |
d1abca5416 | ||
![]() |
579708389a | ||
![]() |
900e4c94a7 | ||
![]() |
a434a45e4a | ||
![]() |
4f6bb0ac15 | ||
![]() |
e27a848b08 | ||
![]() |
8772facadf | ||
![]() |
d5ee59825f | ||
![]() |
4192f22af5 | ||
![]() |
dd07940aea | ||
![]() |
78bb7dae28 | ||
![]() |
e4890f65ae | ||
![]() |
2454a24ee2 | ||
![]() |
7858bd0a5f | ||
![]() |
ce8855510c | ||
![]() |
c42a3d2657 | ||
![]() |
7cb6dd4754 | ||
![]() |
bf1c4e7a21 | ||
![]() |
7a56072765 | ||
![]() |
d6e0512dae | ||
![]() |
1edc70fc4c | ||
![]() |
a20f690cdd | ||
![]() |
eab901d56d | ||
![]() |
8c88d60034 | ||
![]() |
599e3f9557 | ||
![]() |
a9a0f3b99a | ||
![]() |
5fc0c6c1b6 | ||
![]() |
5642e73391 | ||
![]() |
92847fefe0 | ||
![]() |
178ed02d00 | ||
![]() |
3381965896 | ||
![]() |
dc8a70291d | ||
![]() |
a10acdd481 | ||
![]() |
2c4eaccf43 | ||
![]() |
141d5ce77c | ||
![]() |
ccade6ff9f | ||
![]() |
033784bfc8 | ||
![]() |
db39ee35c2 | ||
![]() |
fb6c1a0574 | ||
![]() |
59aec2c038 | ||
![]() |
d45898931a | ||
![]() |
fb50881e74 | ||
![]() |
40fedf59d4 | ||
![]() |
b2014a3db7 | ||
![]() |
f3a4f682a8 | ||
![]() |
c0b76e522b | ||
![]() |
0f530099b4 | ||
![]() |
eecace33bd | ||
![]() |
d049a6f631 | ||
![]() |
4add9a87cc | ||
![]() |
c898487a20 | ||
![]() |
03cb2b0728 | ||
![]() |
3c0b65ff8c | ||
![]() |
b367009c5c | ||
![]() |
22150d0e7a | ||
![]() |
2b98267fa8 | ||
![]() |
a7972046ef | ||
![]() |
524d00d0ed | ||
![]() |
06cc18565e | ||
![]() |
743272f8d6 | ||
![]() |
784fb43ae9 | ||
![]() |
de23a37ab3 | ||
![]() |
72fc84a42c | ||
![]() |
f59aa750e4 | ||
![]() |
66f4c45f5c | ||
![]() |
c204a7e934 | ||
![]() |
aa87a8f070 | ||
![]() |
ab20ca5370 | ||
![]() |
bd84f29a27 | ||
![]() |
ac2077af49 | ||
![]() |
27970e3ac5 | ||
![]() |
4940b7a9ca | ||
![]() |
5e02a8ab7a | ||
![]() |
a088444626 | ||
![]() |
8ef9a1f8f4 | ||
![]() |
150a8152a4 | ||
![]() |
5ac1bae73f | ||
![]() |
1bec21f15f | ||
![]() |
2c1976fd2b | ||
![]() |
13c3407a4e | ||
![]() |
91e6cea79a | ||
![]() |
ac40a411da | ||
![]() |
e2aa47151b | ||
![]() |
dd38f4e0eb | ||
![]() |
17bc8cebbf | ||
![]() |
4f23a9404b | ||
![]() |
b7eafd881f | ||
![]() |
0a994884a0 | ||
![]() |
9926cc3357 | ||
![]() |
5069f20b50 | ||
![]() |
93387f1ff5 | ||
![]() |
7baf51fc09 | ||
![]() |
0e3878a808 | ||
![]() |
4c0b245574 | ||
![]() |
0a0047c4c3 | ||
![]() |
831d1668ef | ||
![]() |
51c8199283 | ||
![]() |
78a1bdfb30 | ||
![]() |
ceff57f9f6 | ||
![]() |
bc2f8662fc | ||
![]() |
2112087e89 | ||
![]() |
c93ccb43c8 | ||
![]() |
58ae1bc1c1 | ||
![]() |
8594caade1 |
@@ -3,7 +3,7 @@ version: 2.1
|
|||||||
executors:
|
executors:
|
||||||
build:
|
build:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/php:7.1-node-browsers
|
- image: circleci/php:7.3-node-browsers
|
||||||
environment:
|
environment:
|
||||||
APP_DEBUG: true
|
APP_DEBUG: true
|
||||||
APP_ENV: testing
|
APP_ENV: testing
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
FROM node:10-jessie as node
|
FROM node:10-jessie as node
|
||||||
|
|
||||||
FROM php:7.1-apache
|
FROM php:7.3-apache
|
||||||
|
|
||||||
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
|
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@ a.k.a. shikorism.net
|
|||||||
|
|
||||||
## 実行環境
|
## 実行環境
|
||||||
|
|
||||||
- PHP 7.1
|
- PHP 7.3
|
||||||
- PostgreSQL 9.6
|
- PostgreSQL 9.6
|
||||||
|
|
||||||
## 開発環境の構築
|
## 開発環境の構築
|
||||||
|
@@ -15,7 +15,7 @@ class Ejaculation extends Model
|
|||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'user_id', 'ejaculated_date',
|
'user_id', 'ejaculated_date',
|
||||||
'note', 'geo_latitude', 'geo_longitude', 'link',
|
'note', 'geo_latitude', 'geo_longitude', 'link',
|
||||||
'is_private'
|
'is_private', 'is_too_sensitive'
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $dates = [
|
protected $dates = [
|
||||||
@@ -56,6 +56,7 @@ class Ejaculation extends Model
|
|||||||
},
|
},
|
||||||
'likes.user' => function ($query) {
|
'likes.user' => function ($query) {
|
||||||
$query->where('is_protected', false)
|
$query->where('is_protected', false)
|
||||||
|
->where('private_likes', false)
|
||||||
->orWhere('id', Auth::id());
|
->orWhere('id', Auth::id());
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
@@ -72,11 +73,25 @@ class Ejaculation extends Model
|
|||||||
$query->latest()->take(10);
|
$query->latest()->take(10);
|
||||||
},
|
},
|
||||||
'likes.user' => function ($query) {
|
'likes.user' => function ($query) {
|
||||||
$query->where('is_protected', false);
|
$query->where('is_protected', false)
|
||||||
|
->where('private_likes', false);
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
->withCount('likes')
|
->withCount('likes')
|
||||||
->addSelect(DB::raw('0 as is_liked'));
|
->addSelect(DB::raw('0 as is_liked'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* このチェックインと同じ情報を流用してチェックインするためのURLを生成
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function makeCheckinURL(): string
|
||||||
|
{
|
||||||
|
return route('checkin', [
|
||||||
|
'link' => $this->link,
|
||||||
|
'tags' => $this->textTags(),
|
||||||
|
'is_too_sensitive' => $this->is_too_sensitive,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,8 @@ class EjaculationController extends Controller
|
|||||||
'link' => $request->input('link', ''),
|
'link' => $request->input('link', ''),
|
||||||
'tags' => $request->input('tags', ''),
|
'tags' => $request->input('tags', ''),
|
||||||
'note' => $request->input('note', ''),
|
'note' => $request->input('note', ''),
|
||||||
'is_private' => $request->input('is_private', 0) == 1
|
'is_private' => $request->input('is_private', 0) == 1,
|
||||||
|
'is_too_sensitive' => $request->input('is_too_sensitive', 0) == 1
|
||||||
];
|
];
|
||||||
|
|
||||||
return view('ejaculation.checkin')->with('defaults', $defaults);
|
return view('ejaculation.checkin')->with('defaults', $defaults);
|
||||||
@@ -56,13 +57,18 @@ class EjaculationController extends Controller
|
|||||||
'ejaculated_date' => Carbon::createFromFormat('Y/m/d H:i', $inputs['date'] . ' ' . $inputs['time']),
|
'ejaculated_date' => Carbon::createFromFormat('Y/m/d H:i', $inputs['date'] . ' ' . $inputs['time']),
|
||||||
'note' => $inputs['note'] ?? '',
|
'note' => $inputs['note'] ?? '',
|
||||||
'link' => $inputs['link'] ?? '',
|
'link' => $inputs['link'] ?? '',
|
||||||
'is_private' => $request->has('is_private') ?? false
|
'is_private' => $request->has('is_private') ?? false,
|
||||||
|
'is_too_sensitive' => $request->has('is_too_sensitive') ?? false
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$tagIds = [];
|
$tagIds = [];
|
||||||
if (!empty($inputs['tags'])) {
|
if (!empty($inputs['tags'])) {
|
||||||
$tags = explode(' ', $inputs['tags']);
|
$tags = explode(' ', $inputs['tags']);
|
||||||
foreach ($tags as $tag) {
|
foreach ($tags as $tag) {
|
||||||
|
if ($tag === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$tag = Tag::firstOrCreate(['name' => $tag]);
|
$tag = Tag::firstOrCreate(['name' => $tag]);
|
||||||
$tagIds[] = $tag->id;
|
$tagIds[] = $tag->id;
|
||||||
}
|
}
|
||||||
@@ -104,6 +110,8 @@ class EjaculationController extends Controller
|
|||||||
{
|
{
|
||||||
$ejaculation = Ejaculation::findOrFail($id);
|
$ejaculation = Ejaculation::findOrFail($id);
|
||||||
|
|
||||||
|
$this->authorize('edit', $ejaculation);
|
||||||
|
|
||||||
return view('ejaculation.edit')->with(compact('ejaculation'));
|
return view('ejaculation.edit')->with(compact('ejaculation'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,6 +119,8 @@ class EjaculationController extends Controller
|
|||||||
{
|
{
|
||||||
$ejaculation = Ejaculation::findOrFail($id);
|
$ejaculation = Ejaculation::findOrFail($id);
|
||||||
|
|
||||||
|
$this->authorize('edit', $ejaculation);
|
||||||
|
|
||||||
$inputs = $request->all();
|
$inputs = $request->all();
|
||||||
|
|
||||||
$validator = Validator::make($inputs, [
|
$validator = Validator::make($inputs, [
|
||||||
@@ -137,13 +147,18 @@ class EjaculationController extends Controller
|
|||||||
'ejaculated_date' => Carbon::createFromFormat('Y/m/d H:i', $inputs['date'] . ' ' . $inputs['time']),
|
'ejaculated_date' => Carbon::createFromFormat('Y/m/d H:i', $inputs['date'] . ' ' . $inputs['time']),
|
||||||
'note' => $inputs['note'] ?? '',
|
'note' => $inputs['note'] ?? '',
|
||||||
'link' => $inputs['link'] ?? '',
|
'link' => $inputs['link'] ?? '',
|
||||||
'is_private' => $request->has('is_private') ?? false
|
'is_private' => $request->has('is_private') ?? false,
|
||||||
|
'is_too_sensitive' => $request->has('is_too_sensitive') ?? false
|
||||||
])->save();
|
])->save();
|
||||||
|
|
||||||
$tagIds = [];
|
$tagIds = [];
|
||||||
if (!empty($inputs['tags'])) {
|
if (!empty($inputs['tags'])) {
|
||||||
$tags = explode(' ', $inputs['tags']);
|
$tags = explode(' ', $inputs['tags']);
|
||||||
foreach ($tags as $tag) {
|
foreach ($tags as $tag) {
|
||||||
|
if ($tag === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$tag = Tag::firstOrCreate(['name' => $tag]);
|
$tag = Tag::firstOrCreate(['name' => $tag]);
|
||||||
$tagIds[] = $tag->id;
|
$tagIds[] = $tag->id;
|
||||||
}
|
}
|
||||||
@@ -160,6 +175,9 @@ class EjaculationController extends Controller
|
|||||||
public function destroy($id)
|
public function destroy($id)
|
||||||
{
|
{
|
||||||
$ejaculation = Ejaculation::findOrFail($id);
|
$ejaculation = Ejaculation::findOrFail($id);
|
||||||
|
|
||||||
|
$this->authorize('edit', $ejaculation);
|
||||||
|
|
||||||
$user = User::findOrFail($ejaculation->user_id);
|
$user = User::findOrFail($ejaculation->user_id);
|
||||||
$ejaculation->tags()->detach();
|
$ejaculation->tags()->detach();
|
||||||
$ejaculation->delete();
|
$ejaculation->delete();
|
||||||
|
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
class SettingController extends Controller
|
class SettingController extends Controller
|
||||||
{
|
{
|
||||||
@@ -18,10 +19,18 @@ class SettingController extends Controller
|
|||||||
$inputs = $request->all();
|
$inputs = $request->all();
|
||||||
$validator = Validator::make($inputs, [
|
$validator = Validator::make($inputs, [
|
||||||
'display_name' => 'required|string|max:20',
|
'display_name' => 'required|string|max:20',
|
||||||
|
'email' => [
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
'email',
|
||||||
|
'max:255',
|
||||||
|
Rule::unique('users')->ignore(Auth::user()->email, 'email')
|
||||||
|
],
|
||||||
'bio' => 'nullable|string|max:160',
|
'bio' => 'nullable|string|max:160',
|
||||||
'url' => 'nullable|url|max:2000'
|
'url' => 'nullable|url|max:2000'
|
||||||
], [], [
|
], [], [
|
||||||
'display_name' => '名前',
|
'display_name' => '名前',
|
||||||
|
'email' => 'メールアドレス',
|
||||||
'bio' => '自己紹介',
|
'bio' => '自己紹介',
|
||||||
'url' => 'URL'
|
'url' => 'URL'
|
||||||
]);
|
]);
|
||||||
@@ -32,6 +41,7 @@ class SettingController extends Controller
|
|||||||
|
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
$user->display_name = $inputs['display_name'];
|
$user->display_name = $inputs['display_name'];
|
||||||
|
$user->email = $inputs['email'];
|
||||||
$user->bio = $inputs['bio'] ?? '';
|
$user->bio = $inputs['bio'] ?? '';
|
||||||
$user->url = $inputs['url'] ?? '';
|
$user->url = $inputs['url'] ?? '';
|
||||||
$user->save();
|
$user->save();
|
||||||
|
37
app/Http/Controllers/TagController.php
Normal file
37
app/Http/Controllers/TagController.php
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Tag;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class TagController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$tags = Tag::select(DB::raw(
|
||||||
|
<<<'SQL'
|
||||||
|
tags.name,
|
||||||
|
count(*) AS "checkins_count"
|
||||||
|
SQL
|
||||||
|
))
|
||||||
|
->join('ejaculation_tag', 'tags.id', '=', 'ejaculation_tag.tag_id')
|
||||||
|
->join('ejaculations', 'ejaculations.id', '=', 'ejaculation_tag.ejaculation_id')
|
||||||
|
->join('users', 'users.id', '=', 'ejaculations.user_id')
|
||||||
|
->where('ejaculations.is_private', false)
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('users.is_protected', false);
|
||||||
|
if (Auth::check()) {
|
||||||
|
$query->orWhere('users.id', Auth::id());
|
||||||
|
}
|
||||||
|
})
|
||||||
|
->groupBy('tags.name')
|
||||||
|
->orderByDesc('checkins_count')
|
||||||
|
->orderBy('tags.name')
|
||||||
|
->paginate(100);
|
||||||
|
|
||||||
|
return view('tag.index', compact('tags'));
|
||||||
|
}
|
||||||
|
}
|
@@ -30,6 +30,7 @@ id,
|
|||||||
ejaculated_date,
|
ejaculated_date,
|
||||||
note,
|
note,
|
||||||
is_private,
|
is_private,
|
||||||
|
is_too_sensitive,
|
||||||
link,
|
link,
|
||||||
to_char(lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC), 'YYYY/MM/DD HH24:MI') AS before_date,
|
to_char(lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC), 'YYYY/MM/DD HH24:MI') AS before_date,
|
||||||
to_char(ejaculated_date - (lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)), 'FMDDD日 FMHH24時間 FMMI分') AS ejaculated_span
|
to_char(ejaculated_date - (lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)), 'FMDDD日 FMHH24時間 FMMI分') AS ejaculated_span
|
||||||
@@ -151,6 +152,7 @@ id,
|
|||||||
ejaculated_date,
|
ejaculated_date,
|
||||||
note,
|
note,
|
||||||
is_private,
|
is_private,
|
||||||
|
is_too_sensitive,
|
||||||
link,
|
link,
|
||||||
to_char(lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC), 'YYYY/MM/DD HH24:MI') AS before_date,
|
to_char(lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC), 'YYYY/MM/DD HH24:MI') AS before_date,
|
||||||
to_char(ejaculated_date - (lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)), 'FMDDD日 FMHH24時間 FMMI分') AS ejaculated_span
|
to_char(ejaculated_date - (lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)), 'FMDDD日 FMHH24時間 FMMI分') AS ejaculated_span
|
||||||
|
@@ -25,19 +25,15 @@ class CienResolver extends MetadataResolver
|
|||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse((string) $res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
// 画像URLから有効期限の起点を拾う
|
// 画像URLから有効期限の起点を拾う
|
||||||
parse_str(parse_url($metadata->image, PHP_URL_QUERY), $params);
|
parse_str(parse_url($metadata->image, PHP_URL_QUERY), $params);
|
||||||
if (empty($params['px-time'])) {
|
if (empty($params['px-time'])) {
|
||||||
throw new \RuntimeException('Parameter "px-time" not found. Image=' . $metadata->image . ' Source=' . $url);
|
throw new \RuntimeException('Parameter "px-time" not found. Image=' . $metadata->image . ' Source=' . $url);
|
||||||
}
|
|
||||||
$metadata->expires_at = Carbon::createFromTimestamp($params['px-time'])->addHour(1);
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
$metadata->expires_at = Carbon::createFromTimestamp($params['px-time'])->addHour(1);
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -52,6 +52,22 @@ class DLsiteResolver implements Resolver
|
|||||||
|
|
||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
|
//アフィリエイトの場合は普通のURLに変換
|
||||||
|
// ID型
|
||||||
|
if (preg_match('~/dlaf/=(/.+/.+)?/link/~', $url)) {
|
||||||
|
preg_match('~www\.dlsite\.com/(?P<genre>.+)/dlaf/=(/.+/.+)?/link/work/aid/(?P<AffiliateId>.+)/id/(?P<titleId>..\d+)(\.html)?~', $url, $matches);
|
||||||
|
$url = "https://www.dlsite.com/{$matches['genre']}/work/=/product_id/{$matches['titleId']}.html";
|
||||||
|
}
|
||||||
|
// URL型
|
||||||
|
if (strpos($url, '/dlaf/=/aid/') !== false) {
|
||||||
|
preg_match('~www\.dlsite\.com/.+/dlaf/=/aid/.+/url/(?P<url>.+)~', $url, $matches);
|
||||||
|
$affiliateUrl = urldecode($matches['url']);
|
||||||
|
if (preg_match('~www\.dlsite\.com/.+/(work|announce)/=/product_id/..\d+(\.html)?~', $affiliateUrl, $matches)) {
|
||||||
|
$url = $affiliateUrl;
|
||||||
|
} else {
|
||||||
|
throw new \RuntimeException("アフィリエイト先のリンクがDLsiteのタイトルではありません: $affiliateUrl");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//スマホページの場合はPCページに正規化
|
//スマホページの場合はPCページに正規化
|
||||||
if (strpos($url, '-touch') !== false) {
|
if (strpos($url, '-touch') !== false) {
|
||||||
@@ -59,57 +75,55 @@ class DLsiteResolver implements Resolver
|
|||||||
}
|
}
|
||||||
|
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$dom = new \DOMDocument();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
||||||
$xpath = new \DOMXPath($dom);
|
$xpath = new \DOMXPath($dom);
|
||||||
|
|
||||||
// OGPタイトルから[]に囲まれているmakerを取得する
|
// OGPタイトルから[]に囲まれているmakerを取得する
|
||||||
// 複数の作者がいる場合スペース区切りになるためexplodeしている
|
// 複数の作者がいる場合スペース区切りになるためexplodeしている
|
||||||
// スペースを含むmakerの場合名前の一部しか取れないが動作には問題ない
|
// スペースを含むmakerの場合名前の一部しか取れないが動作には問題ない
|
||||||
preg_match('~ \[([^\[\]]*)\] (予告作品 )?\| DLsite(がるまに)?$~', $metadata->title, $match);
|
preg_match('~ \[([^\[\]]*)\] (予告作品 )?\| DLsite(がるまに)?$~', $metadata->title, $match);
|
||||||
$makers = explode(' ', $match[1]);
|
$makers = explode(' ', $match[1]);
|
||||||
|
|
||||||
//フォローボタン(.btn_follow)はテキストを含んでしまうことがあるので要素を削除しておく
|
//フォローボタン(.btn_follow)はテキストを含んでしまうことがあるので要素を削除しておく
|
||||||
$followButtonNode = $xpath->query('//*[@class="btn_follow"]')->item(0);
|
$followButtonNode = $xpath->query('//*[@class="btn_follow"]')->item(0);
|
||||||
$followButtonNode->parentNode->removeChild($followButtonNode);
|
$followButtonNode->parentNode->removeChild($followButtonNode);
|
||||||
|
|
||||||
// maker, makerHeadを探す
|
// maker, makerHeadを探す
|
||||||
|
|
||||||
// makers
|
// makers
|
||||||
// #work_makerから「makerを含むテキスト」を持つ要素を持つtdを探す
|
// #work_makerから「makerを含むテキスト」を持つ要素を持つtdを探す
|
||||||
// 作者名単体の場合もあるし、"作者A / 作者B"のようになることもある
|
// 作者名単体の場合もあるし、"作者A / 作者B"のようになることもある
|
||||||
$makersNode = $xpath->query('//*[@id="work_maker"]//*[contains(text(), "' . $makers[0] . '")]/ancestor::td')->item(0);
|
$makersNode = $xpath->query('//*[@id="work_maker"]//*[contains(text(), "' . $makers[0] . '")]/ancestor::td')->item(0);
|
||||||
$makers = trim($makersNode->textContent);
|
// nbspをspaceに置換
|
||||||
|
$makers = trim(str_replace("\xc2\xa0", ' ', $makersNode->textContent));
|
||||||
|
|
||||||
// makersHaed
|
// makersHaed
|
||||||
// $makerNode(td)に対するthを探す
|
// $makerNode(td)に対するthを探す
|
||||||
// "著者", "サークル名", "ブランド名"など
|
// "著者", "サークル名", "ブランド名"など
|
||||||
$makersHeadNode = $xpath->query('preceding-sibling::th', $makersNode)->item(0);
|
$makersHeadNode = $xpath->query('preceding-sibling::th', $makersNode)->item(0);
|
||||||
$makersHead = trim($makersHeadNode->textContent);
|
$makersHead = trim($makersHeadNode->textContent);
|
||||||
|
|
||||||
// 余分な文を消す
|
// 余分な文を消す
|
||||||
|
|
||||||
// OGPタイトルから作者名とサイト名を消す
|
// OGPタイトルから作者名とサイト名を消す
|
||||||
$metadata->title = trim(preg_replace('~ \[[^\[\]]*\] (予告作品 )?\| DLsite(がるまに)?$~', '', $metadata->title));
|
$metadata->title = trim(preg_replace('~ \[[^\[\]]*\] (予告作品 )?\| DLsite(がるまに)?$~', '', $metadata->title));
|
||||||
|
|
||||||
// OGP説明文から定型文を消す
|
// OGP説明文から定型文を消す
|
||||||
if (strpos($url, 'dlsite.com/eng/') || strpos($url, 'dlsite.com/ecchi-eng/')) {
|
if (strpos($url, 'dlsite.com/eng/') || strpos($url, 'dlsite.com/ecchi-eng/')) {
|
||||||
$metadata->description = trim(preg_replace('~DLsite.+ is a download shop for .+With a huge selection of products, we\'re sure you\'ll find whatever tickles your fancy\. DLsite is one of the greatest indie contents download shops in Japan\.$~', '', $metadata->description));
|
$metadata->description = preg_replace('~DLsite.+ is a download shop for .+With a huge selection of products, we\'re sure you\'ll find whatever tickles your fancy\. DLsite is one of the greatest indie contents download shops in Japan\.$~', '', $metadata->description);
|
||||||
} else {
|
|
||||||
$metadata->description = trim(preg_replace('~「DLsite.+」は.+のダウンロードショップ。お気に入りの作品をすぐダウンロードできてすぐ楽しめる!毎日更新しているのであなたが探している作品にきっと出会えます。国内最大級の二次元総合ダウンロードショップ「DLsite」!$~', '', $metadata->description));
|
|
||||||
}
|
|
||||||
|
|
||||||
// 整形
|
|
||||||
$metadata->description = $makersHead . ': ' . $makers . PHP_EOL . $metadata->description;
|
|
||||||
$metadata->image = str_replace('img_sam.jpg', 'img_main.jpg', $metadata->image);
|
|
||||||
$metadata->tags = $this->extractTags($res->getBody());
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
} else {
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
$metadata->description = preg_replace('~「DLsite.+」は.+のダウンロードショップ。お気に入りの作品をすぐダウンロードできてすぐ楽しめる!毎日更新しているのであなたが探している作品にきっと出会えます。国内最大級の二次元総合ダウンロードショップ「DLsite」!$~', '', $metadata->description);
|
||||||
}
|
}
|
||||||
|
$metadata->description = trim(strip_tags($metadata->description));
|
||||||
|
|
||||||
|
// 整形
|
||||||
|
$metadata->description = $makersHead . ': ' . $makers . PHP_EOL . $metadata->description;
|
||||||
|
$metadata->image = str_replace('img_sam.jpg', 'img_main.jpg', $metadata->image);
|
||||||
|
$metadata->tags = $this->extractTags($res->getBody());
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,35 +23,17 @@ class DeviantArtResolver implements Resolver
|
|||||||
|
|
||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get('https://backend.deviantart.com/oembed?url=' . $url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$data = json_decode($res->getBody()->getContents(), true);
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
$metadata = new Metadata();
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$metadata->title = $data['title'] ?? '';
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
$metadata->description = 'By ' . $data['author_name'];
|
||||||
$xpath = new \DOMXPath($dom);
|
$metadata->image = $data['url'];
|
||||||
|
if (isset($data['tags'])) {
|
||||||
$node = $xpath->query('//*[@id="pimp-preload"]/following-sibling::div//img')->item(0);
|
$metadata->tags = explode(', ', $data['tags']);
|
||||||
$srcset = $node->getAttribute('srcset');
|
|
||||||
$srcset_array = explode('w,', $srcset);
|
|
||||||
$src = end($srcset_array);
|
|
||||||
$src = preg_replace('~ \d+w$~', '', $src);
|
|
||||||
|
|
||||||
if (preg_match('~\.wixmp\.com$~', parse_url($src)['host'])) {
|
|
||||||
// アスペクト比を保ったまま、縦か横が最大700pxになるように変換する。
|
|
||||||
// Ref: https://support.wixmp.com/en/article/image-service-3835799
|
|
||||||
if (strpos($src, '/v1/fill/')) {
|
|
||||||
$src = preg_replace('~/v1/fill/w_\d+,h_\d+,q_\d+,strp~', '/v1/fit/w_700,h_700,q_70,strp', $src);
|
|
||||||
} else {
|
|
||||||
$src = $src . '/v1/fit/w_700,h_700,q_70,strp/image.jpg';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$metadata->image = $src;
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,21 +24,17 @@ class FC2ContentsResolver implements Resolver
|
|||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$dom = new \DOMDocument();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
||||||
$xpath = new \DOMXPath($dom);
|
$xpath = new \DOMXPath($dom);
|
||||||
|
|
||||||
$thumbnailNode = $xpath->query('//*[@class="main_thum_img"]/a')->item(0);
|
$thumbnailNode = $xpath->query('//*[@class="main_thum_img"]/a')->item(0);
|
||||||
if ($thumbnailNode) {
|
if ($thumbnailNode) {
|
||||||
$metadata->image = preg_replace('~^http:~', 'https:', $thumbnailNode->getAttribute('href'));
|
$metadata->image = preg_replace('~^http:~', 'https:', $thumbnailNode->getAttribute('href'));
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
namespace App\MetadataResolver;
|
namespace App\MetadataResolver;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use Illuminate\Support\Facades\Log;
|
|
||||||
|
|
||||||
class FantiaResolver implements Resolver
|
class FantiaResolver implements Resolver
|
||||||
{
|
{
|
||||||
@@ -11,46 +10,31 @@ class FantiaResolver implements Resolver
|
|||||||
* @var Client
|
* @var Client
|
||||||
*/
|
*/
|
||||||
private $client;
|
private $client;
|
||||||
/**
|
|
||||||
* @var OGPResolver
|
|
||||||
*/
|
|
||||||
private $ogpResolver;
|
|
||||||
|
|
||||||
public function __construct(Client $client, OGPResolver $ogpResolver)
|
public function __construct(Client $client)
|
||||||
{
|
{
|
||||||
$this->client = $client;
|
$this->client = $client;
|
||||||
$this->ogpResolver = $ogpResolver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
preg_match("~\d+~", $url, $match);
|
preg_match("~posts/(\d+)~", $url, $match);
|
||||||
$postId = $match[0];
|
$postId = $match[1];
|
||||||
|
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get("https://fantia.jp/api/v1/posts/{$postId}");
|
||||||
if ($res->getStatusCode() === 200) {
|
$data = json_decode(str_replace('\r\n', '\n', (string) $res->getBody()), true);
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
$post = $data['post'];
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$tags = array_map(function ($tag) {
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
return $tag['name'];
|
||||||
$xpath = new \DOMXPath($dom);
|
}, $post['tags']);
|
||||||
|
|
||||||
$node = $xpath->query("//meta[@property='twitter:image']")->item(0);
|
$metadata = new Metadata();
|
||||||
$ogpUrl = $node->getAttribute('content');
|
$metadata->title = $post['title'] ?? '';
|
||||||
|
$metadata->description = 'サークル: ' . $post['fanclub']['fanclub_name_with_creator_name'] . PHP_EOL . $post['comment'];
|
||||||
|
$metadata->image = str_replace('micro', 'main', $post['thumb_micro']) ?? '';
|
||||||
|
$metadata->tags = array_merge($tags, [$post['fanclub']['creator_name']]);
|
||||||
|
|
||||||
// 投稿に画像がない場合(ogp.jpgでない場合)のみ大きい画像に変換する
|
return $metadata;
|
||||||
if ($ogpUrl != 'http://fantia.jp/images/ogp.jpg') {
|
|
||||||
preg_match("~https://fantia\.s3\.amazonaws\.com/uploads/post/file/{$postId}/ogp_(.*?)\.(jpg|png)~", $ogpUrl, $match);
|
|
||||||
$uuid = $match[1];
|
|
||||||
$extension = $match[2];
|
|
||||||
|
|
||||||
// 大きい画像に変換
|
|
||||||
$metadata->image = "https://c.fantia.jp/uploads/post/file/{$postId}/main_{$uuid}.{$extension}";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace App\MetadataResolver;
|
namespace App\MetadataResolver;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
class FanzaResolver implements Resolver
|
class FanzaResolver implements Resolver
|
||||||
{
|
{
|
||||||
@@ -21,17 +22,84 @@ class FanzaResolver implements Resolver
|
|||||||
$this->ogpResolver = $ogpResolver;
|
$this->ogpResolver = $ogpResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* arrayの各要素をtrim・スペースの_置換をした後、重複した値を削除してキーを詰め直す
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
*
|
||||||
|
* @return array 処理されたarray
|
||||||
|
*/
|
||||||
|
public function array_finish(array $array): array
|
||||||
|
{
|
||||||
|
$array = array_map('trim', $array);
|
||||||
|
$array = array_map((function ($value) {
|
||||||
|
return str_replace(' ', '_', $value);
|
||||||
|
}), $array);
|
||||||
|
$array = array_unique($array);
|
||||||
|
$array = array_values($array);
|
||||||
|
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$html = (string) $res->getBody();
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
$crawler = new Crawler($html);
|
||||||
$metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $metadata->image);
|
|
||||||
$metadata->description = str_replace('<>', '', $metadata->description);
|
// 動画
|
||||||
|
if (preg_match('~www\.dmm\.co\.jp/digital/(videoa|videoc|anime)/-/detail~', $url)) {
|
||||||
|
$metadata = new Metadata();
|
||||||
|
$metadata->title = trim($crawler->filter('#title')->text(''));
|
||||||
|
$metadata->description = trim($crawler->filter('.box-rank+table+div+div')->text(''));
|
||||||
|
$metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $crawler->filter('meta[property="og:image"]')->attr('content'));
|
||||||
|
$metadata->tags = $this->array_finish($crawler->filter('.box-rank+table a:not([href="#review"])')->extract(['_text']));
|
||||||
|
|
||||||
return $metadata;
|
return $metadata;
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 同人
|
||||||
|
if (mb_strpos($url, 'www.dmm.co.jp/dc/doujin/-/detail/') !== false) {
|
||||||
|
$genre = $this->array_finish($crawler->filter('.m-productInformation a:not([href="#update-top"])')->extract(['_text']));
|
||||||
|
$genre = array_filter($genre, (function ($text) {
|
||||||
|
return !preg_match('~%OFF対象$~', $text);
|
||||||
|
}));
|
||||||
|
|
||||||
|
$metadata = new Metadata();
|
||||||
|
$metadata->title = $crawler->filter('meta[property="og:title"]')->attr('content');
|
||||||
|
$metadata->description = trim($crawler->filter('.summary__txt')->text(''));
|
||||||
|
$metadata->image = $crawler->filter('meta[property="og:image"]')->attr('content');
|
||||||
|
$metadata->tags = array_merge($genre, [$crawler->filter('.circleName__txt')->text('')]);
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 電子書籍
|
||||||
|
if (mb_strpos($url, 'book.dmm.co.jp/detail/') !== false) {
|
||||||
|
$metadata = new Metadata();
|
||||||
|
$metadata->title = trim($crawler->filter('#title')->text(''));
|
||||||
|
$metadata->description = trim($crawler->filter('.m-boxDetailProduct__info__story')->text(''));
|
||||||
|
$metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $crawler->filter('meta[property="og:image"]')->attr('content'));
|
||||||
|
$metadata->tags = $this->array_finish($crawler->filter('.m-boxDetailProductInfoMainList__description__list__item, .m-boxDetailProductInfo__list__description__item a')->extract(['_text']));
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PCゲーム
|
||||||
|
if (mb_strpos($url, 'dlsoft.dmm.co.jp/detail/') !== false) {
|
||||||
|
$metadata = new Metadata();
|
||||||
|
$metadata->title = trim($crawler->filter('#title')->text(''));
|
||||||
|
$metadata->description = trim($crawler->filter('.area-detail-read .text-overflow')->text(''));
|
||||||
|
$metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $crawler->filter('meta[property="og:image"]')->attr('content'));
|
||||||
|
$metadata->tags = $this->array_finish($crawler->filter('.area-bskt table a:not([href="#review"])')->extract(['_text']));
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上で特に対応しなかったURL 画像の置換くらいはしておく
|
||||||
|
$metadata = $this->ogpResolver->parse($html);
|
||||||
|
$metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $metadata->image);
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace App\MetadataResolver;
|
namespace App\MetadataResolver;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
class IwaraResolver implements Resolver
|
class IwaraResolver implements Resolver
|
||||||
{
|
{
|
||||||
@@ -19,51 +20,41 @@ class IwaraResolver implements Resolver
|
|||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
|
$metadata = new Metadata();
|
||||||
|
$html = (string) $res->getBody();
|
||||||
|
$crawler = new Crawler($html);
|
||||||
|
|
||||||
if ($res->getStatusCode() === 200) {
|
$infoElements = $crawler->filter('#video-player + div, .field-name-field-video-url + div, .field-name-field-images + div');
|
||||||
$dom = new \DOMDocument();
|
$title = $infoElements->filter('h1.title')->text();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
$author = $infoElements->filter('.username')->text();
|
||||||
$xpath = new \DOMXPath($dom);
|
$description = $infoElements->filter('.field-type-text-with-summary')->text('');
|
||||||
|
$tags = $infoElements->filter('a[href^="/videos"], a[href^="/images"]')->extract('_text');
|
||||||
|
// 役に立たないタグを削除する
|
||||||
|
$tags = array_values(array_diff($tags, ['Uncategorized', 'Other']));
|
||||||
|
array_push($tags, $author);
|
||||||
|
|
||||||
$metadata = new Metadata();
|
$metadata->title = $title;
|
||||||
|
$metadata->description = '投稿者: ' . $author . PHP_EOL . $description;
|
||||||
|
$metadata->tags = $tags;
|
||||||
|
|
||||||
// find title
|
// iwara video
|
||||||
foreach ($xpath->query('//title') as $node) {
|
if ($crawler->filter('#video-player')->count()) {
|
||||||
$content = $node->textContent;
|
$metadata->image = 'https:' . $crawler->filter('#video-player')->attr('poster');
|
||||||
if (!empty($content)) {
|
|
||||||
$metadata->title = $content;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// find thumbnail
|
|
||||||
foreach ($xpath->query('//*[@id="video-player"]') as $node) {
|
|
||||||
$poster = $node->getAttribute('poster');
|
|
||||||
if (!empty($poster)) {
|
|
||||||
if (strpos($poster, '//') === 0) {
|
|
||||||
$poster = 'https:' . $poster;
|
|
||||||
}
|
|
||||||
$metadata->image = $poster;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (empty($metadata->image)) {
|
|
||||||
// YouTube embedded?
|
|
||||||
foreach ($xpath->query('//div[@class="embedded-video"]//iframe') as $node) {
|
|
||||||
$src = $node->getAttribute('src');
|
|
||||||
if (preg_match('~youtube\.com/embed/(\S+)\?~', $src, $matches) !== -1) {
|
|
||||||
$youtubeId = $matches[1];
|
|
||||||
$iwaraThumbUrl = 'https://i.iwara.tv/sites/default/files/styles/thumbnail/public/video_embed_field_thumbnails/youtube/' . $youtubeId . '.jpg';
|
|
||||||
|
|
||||||
$metadata->image = $iwaraThumbUrl;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// youtube
|
||||||
|
if ($crawler->filter('iframe[src^="//www.youtube.com"]')->count()) {
|
||||||
|
if (preg_match('~youtube\.com/embed/(\S+)\?~', $crawler->filter('iframe[src^="//www.youtube.com"]')->attr('src'), $matches) === 1) {
|
||||||
|
$youtubeId = $matches[1];
|
||||||
|
$metadata->image = 'https://img.youtube.com/vi/' . $youtubeId . '/maxresdefault.jpg';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// images
|
||||||
|
if ($crawler->filter('.field-name-field-images')->count()) {
|
||||||
|
$metadata->image = 'https:' . $crawler->filter('.field-name-field-images a')->first()->attr('href');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
36
app/MetadataResolver/Kb10uyShortStoryServerResolver.php
Normal file
36
app/MetadataResolver/Kb10uyShortStoryServerResolver.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\MetadataResolver;
|
||||||
|
|
||||||
|
use GuzzleHttp\Client;
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
|
class Kb10uyShortStoryServerResolver implements Resolver
|
||||||
|
{
|
||||||
|
protected const EXCLUDED_TAGS = ['R-15', 'R-18'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Client
|
||||||
|
*/
|
||||||
|
private $client;
|
||||||
|
|
||||||
|
public function __construct(Client $client)
|
||||||
|
{
|
||||||
|
$this->client = $client;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resolve(string $url): Metadata
|
||||||
|
{
|
||||||
|
$res = $this->client->get($url);
|
||||||
|
$html = (string) $res->getBody();
|
||||||
|
$crawler = new Crawler($html);
|
||||||
|
$infoElement = $crawler->filter('div.post-info');
|
||||||
|
|
||||||
|
$metadata = new Metadata();
|
||||||
|
$metadata->title = $infoElement->filter('h1')->text();
|
||||||
|
$metadata->description = trim($infoElement->filter('p.summary')->text());
|
||||||
|
$metadata->tags = array_values(array_diff($infoElement->filter('ul.tags > li.tag > a')->extract('_text'), self::EXCLUDED_TAGS));
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
|
}
|
||||||
|
}
|
@@ -24,33 +24,28 @@ class KomifloResolver implements Resolver
|
|||||||
$id = $matches[1];
|
$id = $matches[1];
|
||||||
|
|
||||||
$res = $this->client->get('https://api.komiflo.com/content/id/' . $id);
|
$res = $this->client->get('https://api.komiflo.com/content/id/' . $id);
|
||||||
if ($res->getStatusCode() === 200) {
|
$json = json_decode($res->getBody()->getContents(), true);
|
||||||
$json = json_decode($res->getBody()->getContents(), true);
|
$metadata = new Metadata();
|
||||||
$metadata = new Metadata();
|
|
||||||
|
|
||||||
$metadata->title = $json['content']['data']['title'] ?? '';
|
$metadata->title = $json['content']['data']['title'] ?? '';
|
||||||
$metadata->description = ($json['content']['attributes']['artists']['children'][0]['data']['name'] ?? '?') .
|
$metadata->description = ($json['content']['attributes']['artists']['children'][0]['data']['name'] ?? '?') .
|
||||||
' - ' .
|
' - ' . ($json['content']['parents'][0]['data']['title'] ?? '?');
|
||||||
($json['content']['parents'][0]['data']['title'] ?? '?');
|
$metadata->image = 'https://t.komiflo.com/564_mobile_large_3x/' . $json['content']['named_imgs']['cover']['filename'];
|
||||||
$metadata->image = 'https://t.komiflo.com/564_mobile_large_3x/' . $json['content']['named_imgs']['cover']['filename'];
|
|
||||||
|
|
||||||
// 作者情報
|
// 作者情報
|
||||||
if (!empty($json['content']['attributes']['artists']['children'])) {
|
if (!empty($json['content']['attributes']['artists']['children'])) {
|
||||||
foreach ($json['content']['attributes']['artists']['children'] as $artist) {
|
foreach ($json['content']['attributes']['artists']['children'] as $artist) {
|
||||||
$metadata->tags[] = preg_replace('/\s/', '_', $artist['data']['name']);
|
$metadata->tags[] = preg_replace('/\s/', '_', $artist['data']['name']);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// タグ
|
|
||||||
if (!empty($json['content']['attributes']['tags']['children'])) {
|
|
||||||
foreach ($json['content']['attributes']['tags']['children'] as $tag) {
|
|
||||||
$metadata->tags[] = preg_replace('/\s/', '_', $tag['data']['name']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// タグ
|
||||||
|
if (!empty($json['content']['attributes']['tags']['children'])) {
|
||||||
|
foreach ($json['content']['attributes']['tags']['children'] as $tag) {
|
||||||
|
$metadata->tags[] = preg_replace('/\s/', '_', $tag['data']['name']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -27,46 +27,42 @@ class MelonbooksResolver implements Resolver
|
|||||||
$cookieJar = CookieJar::fromArray(['AUTH_ADULT' => '1'], 'www.melonbooks.co.jp');
|
$cookieJar = CookieJar::fromArray(['AUTH_ADULT' => '1'], 'www.melonbooks.co.jp');
|
||||||
|
|
||||||
$res = $this->client->get($url, ['cookies' => $cookieJar]);
|
$res = $this->client->get($url, ['cookies' => $cookieJar]);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$dom = new \DOMDocument();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
||||||
$xpath = new \DOMXPath($dom);
|
$xpath = new \DOMXPath($dom);
|
||||||
$descriptionNodelist = $xpath->query('//div[@id="description"]//p');
|
$descriptionNodelist = $xpath->query('//div[@id="description"]//p');
|
||||||
$specialDescriptionNodelist = $xpath->query('//div[@id="special_description"]//p');
|
$specialDescriptionNodelist = $xpath->query('//div[@id="special_description"]//p');
|
||||||
|
|
||||||
// censoredフラグの除去
|
// censoredフラグの除去
|
||||||
if (mb_strpos($metadata->image, '&c=1') !== false) {
|
if (mb_strpos($metadata->image, '&c=1') !== false) {
|
||||||
$metadata->image = preg_replace('/&c=1/u', '', $metadata->image);
|
$metadata->image = preg_replace('/&c=1/u', '', $metadata->image);
|
||||||
}
|
|
||||||
|
|
||||||
// 抽出
|
|
||||||
preg_match('~^(.+)((.+))の通販・購入はメロンブックス$~', $metadata->title, $match);
|
|
||||||
$title = $match[1];
|
|
||||||
$maker = $match[2];
|
|
||||||
|
|
||||||
// 整形
|
|
||||||
$description = 'サークル: ' . $maker . "\n";
|
|
||||||
|
|
||||||
if ($specialDescriptionNodelist->length !== 0) {
|
|
||||||
$description .= trim(str_replace('<br>', "\n", $specialDescriptionNodelist->item(0)->nodeValue)) . "\n";
|
|
||||||
if ($specialDescriptionNodelist->length === 2) {
|
|
||||||
$description .= "\n";
|
|
||||||
$description .= trim(str_replace('<br>', "\n", $specialDescriptionNodelist->item(1)->nodeValue)) . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($descriptionNodelist->length !== 0) {
|
|
||||||
$description .= trim(str_replace('<br>', "\n", $descriptionNodelist->item(0)->nodeValue));
|
|
||||||
}
|
|
||||||
|
|
||||||
$metadata->title = $title;
|
|
||||||
$metadata->description = trim($description);
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 抽出
|
||||||
|
preg_match('~^(.+)((.+))の通販・購入はメロンブックス$~', $metadata->title, $match);
|
||||||
|
$title = $match[1];
|
||||||
|
$maker = $match[2];
|
||||||
|
|
||||||
|
// 整形
|
||||||
|
$description = 'サークル: ' . $maker . "\n";
|
||||||
|
|
||||||
|
if ($specialDescriptionNodelist->length !== 0) {
|
||||||
|
$description .= trim(str_replace('<br>', "\n", $specialDescriptionNodelist->item(0)->nodeValue)) . "\n";
|
||||||
|
if ($specialDescriptionNodelist->length === 2) {
|
||||||
|
$description .= "\n";
|
||||||
|
$description .= trim(str_replace('<br>', "\n", $specialDescriptionNodelist->item(1)->nodeValue)) . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($descriptionNodelist->length !== 0) {
|
||||||
|
$description .= trim(str_replace('<br>', "\n", $descriptionNodelist->item(0)->nodeValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
$metadata->title = $title;
|
||||||
|
$metadata->description = trim($description);
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -14,10 +14,13 @@ class MetadataResolver implements Resolver
|
|||||||
'~komiflo\.com(/#!)?/comics/(\\d+)~' => KomifloResolver::class,
|
'~komiflo\.com(/#!)?/comics/(\\d+)~' => KomifloResolver::class,
|
||||||
'~www\.melonbooks\.co\.jp/detail/detail\.php~' => MelonbooksResolver::class,
|
'~www\.melonbooks\.co\.jp/detail/detail\.php~' => MelonbooksResolver::class,
|
||||||
'~ec\.toranoana\.(jp|shop)/(tora|joshi)(_[rd]+)?/(ec|digi)/item/~' => ToranoanaResolver::class,
|
'~ec\.toranoana\.(jp|shop)/(tora|joshi)(_[rd]+)?/(ec|digi)/item/~' => ToranoanaResolver::class,
|
||||||
'~iwara\.tv/videos/.*~' => IwaraResolver::class,
|
'~iwara\.tv/(videos|images)/.*~' => IwaraResolver::class,
|
||||||
'~www\.dlsite\.com/.*/(work|announce)/=/product_id/..\d+(\.html)?~' => DLsiteResolver::class,
|
'~www\.dlsite\.com/.*/(work|announce)/=/product_id/..\d+(\.html)?~' => DLsiteResolver::class,
|
||||||
|
'~www\.dlsite\.com/.*/dlaf/=(/.+/.+)?/link/work/aid/.+(/id)?/..\d+(\.html)?~' => DLsiteResolver::class,
|
||||||
|
'~www\.dlsite\.com/.*/dlaf/=/aid/.+/url/.+~' => DLsiteResolver::class,
|
||||||
'~dlsite\.jp/...tw/..\d+~' => DLsiteResolver::class,
|
'~dlsite\.jp/...tw/..\d+~' => DLsiteResolver::class,
|
||||||
'~www\.pixiv\.net/member_illust\.php\?illust_id=\d+~' => PixivResolver::class,
|
'~www\.pixiv\.net/member_illust\.php\?illust_id=\d+~' => PixivResolver::class,
|
||||||
|
'~www\.pixiv\.net/artworks/\d+~' => PixivResolver::class,
|
||||||
'~www\.pixiv\.net/user/\d+/series/\d+~' => PixivResolver::class,
|
'~www\.pixiv\.net/user/\d+/series/\d+~' => PixivResolver::class,
|
||||||
'~fantia\.jp/posts/\d+~' => FantiaResolver::class,
|
'~fantia\.jp/posts/\d+~' => FantiaResolver::class,
|
||||||
'~dmm\.co\.jp/~' => FanzaResolver::class,
|
'~dmm\.co\.jp/~' => FanzaResolver::class,
|
||||||
@@ -29,6 +32,7 @@ class MetadataResolver implements Resolver
|
|||||||
'~(adult\.)?contents\.fc2\.com\/article_search\.php\?id=\d+~' => FC2ContentsResolver::class,
|
'~(adult\.)?contents\.fc2\.com\/article_search\.php\?id=\d+~' => FC2ContentsResolver::class,
|
||||||
'~store\.steampowered\.com/app/\d+~' => SteamResolver::class,
|
'~store\.steampowered\.com/app/\d+~' => SteamResolver::class,
|
||||||
'~www\.xtube\.com/video-watch/.*-\d+$~'=> XtubeResolver::class,
|
'~www\.xtube\.com/video-watch/.*-\d+$~'=> XtubeResolver::class,
|
||||||
|
'~ss\.kb10uy\.org/posts/\d+$~' => Kb10uyShortStoryServerResolver::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
public $mimeTypes = [
|
public $mimeTypes = [
|
||||||
|
@@ -27,34 +27,30 @@ class NarouResolver implements Resolver
|
|||||||
$cookieJar = CookieJar::fromArray(['over18' => 'yes'], '.syosetu.com');
|
$cookieJar = CookieJar::fromArray(['over18' => 'yes'], '.syosetu.com');
|
||||||
|
|
||||||
$res = $this->client->get($url, ['cookies' => $cookieJar]);
|
$res = $this->client->get($url, ['cookies' => $cookieJar]);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
$metadata->description = '';
|
||||||
$metadata->description = '';
|
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$dom = new \DOMDocument();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'ASCII,JIS,UTF-8,eucJP-win,SJIS-win'));
|
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'ASCII,JIS,UTF-8,eucJP-win,SJIS-win'));
|
||||||
$xpath = new \DOMXPath($dom);
|
$xpath = new \DOMXPath($dom);
|
||||||
|
|
||||||
$description = [];
|
$description = [];
|
||||||
|
|
||||||
// 作者名
|
// 作者名
|
||||||
$writerNodes = $xpath->query('//*[contains(@class, "novel_writername")]');
|
$writerNodes = $xpath->query('//*[contains(@class, "novel_writername")]');
|
||||||
if ($writerNodes->length !== 0 && !empty($writerNodes->item(0)->textContent)) {
|
if ($writerNodes->length !== 0 && !empty($writerNodes->item(0)->textContent)) {
|
||||||
$description[] = trim($writerNodes->item(0)->textContent);
|
$description[] = trim($writerNodes->item(0)->textContent);
|
||||||
}
|
|
||||||
|
|
||||||
// あらすじ
|
|
||||||
$exNodes = $xpath->query('//*[@id="novel_ex"]');
|
|
||||||
if ($exNodes->length !== 0 && !empty($exNodes->item(0)->textContent)) {
|
|
||||||
$summary = trim($exNodes->item(0)->textContent);
|
|
||||||
$description[] = mb_strimwidth($summary, 0, 101, '…'); // 100 + '…'(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
$metadata->description = implode(' / ', $description);
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// あらすじ
|
||||||
|
$exNodes = $xpath->query('//*[@id="novel_ex"]');
|
||||||
|
if ($exNodes->length !== 0 && !empty($exNodes->item(0)->textContent)) {
|
||||||
|
$summary = trim($exNodes->item(0)->textContent);
|
||||||
|
$description[] = mb_strimwidth($summary, 0, 101, '…'); // 100 + '…'(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
$metadata->description = implode(' / ', $description);
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace App\MetadataResolver;
|
namespace App\MetadataResolver;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
class NicoSeigaResolver implements Resolver
|
class NicoSeigaResolver implements Resolver
|
||||||
{
|
{
|
||||||
@@ -24,16 +25,18 @@ class NicoSeigaResolver implements Resolver
|
|||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$html = (string)$res->getBody();
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
$metadata = $this->ogpResolver->parse($html);
|
||||||
|
$crawler = new Crawler($html);
|
||||||
|
|
||||||
// ページURLからサムネイルURLに変換
|
// タグ
|
||||||
preg_match('~http://(?:(?:sp\\.)?seiga\\.nicovideo\\.jp/seiga(?:/#!)?|nico\\.ms)/im(\\d+)~', $url, $matches);
|
$excludeTags = ['R-15'];
|
||||||
$metadata->image = "http://lohas.nicoseiga.jp/thumb/${matches[1]}l?";
|
$metadata->tags = array_values(array_diff($crawler->filter('.tag')->extract(['_text']), $excludeTags));
|
||||||
|
|
||||||
return $metadata;
|
// ページURLからサムネイルURLに変換
|
||||||
} else {
|
preg_match('~https?://(?:(?:sp\\.)?seiga\\.nicovideo\\.jp/seiga(?:/#!)?|nico\\.ms)/im(\\d+)~', $url, $matches);
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
$metadata->image = "https://lohas.nicoseiga.jp/thumb/${matches[1]}l?";
|
||||||
}
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace App\MetadataResolver;
|
namespace App\MetadataResolver;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
class NijieResolver implements Resolver
|
class NijieResolver implements Resolver
|
||||||
{
|
{
|
||||||
@@ -30,27 +31,33 @@ class NijieResolver implements Resolver
|
|||||||
$url = preg_replace('~view_popup\.php~', 'view.php', $url);
|
$url = preg_replace('~view_popup\.php~', 'view.php', $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
$client = $this->client;
|
$res = $this->client->get($url);
|
||||||
$res = $client->get($url);
|
$html = (string) $res->getBody();
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($html);
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
$crawler = new Crawler($html);
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$json = $crawler->filter('script[type="application/ld+json"]')->first()->text();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
|
||||||
$xpath = new \DOMXPath($dom);
|
|
||||||
$dataNode = $xpath->query('//script[substring(@type, string-length(@type) - 3, 4) = "json"]');
|
|
||||||
foreach ($dataNode as $node) {
|
|
||||||
// 改行がそのまま入っていることがあるのでデコード前にエスケープが必要
|
|
||||||
$imageData = json_decode(preg_replace('/\r?\n/', '\n', $node->nodeValue), true);
|
|
||||||
if (isset($imageData['thumbnailUrl']) && !ends_with($imageData['thumbnailUrl'], '.gif') && !ends_with($imageData['thumbnailUrl'], '.mp4')) {
|
|
||||||
$metadata->image = preg_replace('~nijie\\.info/.*/nijie_picture/~', 'nijie.info/nijie_picture/', $imageData['thumbnailUrl']);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
// 改行がそのまま入っていることがあるのでデコード前にエスケープが必要
|
||||||
} else {
|
$data = json_decode(preg_replace('/\r?\n/', '\n', $json), true);
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
|
// DomCrawler内でjson内の日本語がHTMLエンティティに変換されるので、全要素に対してhtml_entity_decode
|
||||||
|
array_walk_recursive($data, function (&$v) {
|
||||||
|
$v = html_entity_decode($v);
|
||||||
|
});
|
||||||
|
|
||||||
|
$metadata->title = $data['name'];
|
||||||
|
$metadata->description = '投稿者: ' . $data['author']['name'] . PHP_EOL . $data['description'];
|
||||||
|
if (
|
||||||
|
isset($data['thumbnailUrl']) &&
|
||||||
|
!ends_with($data['thumbnailUrl'], '.gif') &&
|
||||||
|
!ends_with($data['thumbnailUrl'], '.mp4')
|
||||||
|
) {
|
||||||
|
// サムネイルからメイン画像に
|
||||||
|
$metadata->image = str_replace('__rs_l160x160/', '', $data['thumbnailUrl']);
|
||||||
}
|
}
|
||||||
|
$metadata->tags = $crawler->filter('#view-tag span.tag_name')->extract('_text');
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,12 +18,7 @@ class OGPResolver implements Resolver, Parser
|
|||||||
|
|
||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
return $this->parse($this->client->get($url)->getBody());
|
||||||
if ($res->getStatusCode() === 200) {
|
|
||||||
return $this->parse($res->getBody());
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parse(string $html): Metadata
|
public function parse(string $html): Metadata
|
||||||
|
@@ -25,18 +25,14 @@ class PatreonResolver implements Resolver
|
|||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
parse_str(parse_url($metadata->image, PHP_URL_QUERY), $query);
|
parse_str(parse_url($metadata->image, PHP_URL_QUERY), $query);
|
||||||
if (isset($query['token-time'])) {
|
if (isset($query['token-time'])) {
|
||||||
$expires_at_unixtime = $query['token-time'];
|
$expires_at_unixtime = $query['token-time'];
|
||||||
$metadata->expires_at = Carbon::createFromTimestamp($expires_at_unixtime);
|
$metadata->expires_at = Carbon::createFromTimestamp($expires_at_unixtime);
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -38,52 +38,48 @@ class PixivResolver implements Resolver
|
|||||||
{
|
{
|
||||||
if (preg_match('~www\.pixiv\.net/user/\d+/series/\d+~', $url, $matches)) {
|
if (preg_match('~www\.pixiv\.net/user/\d+/series/\d+~', $url, $matches)) {
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
$metadata->image = $this->proxize($metadata->image);
|
||||||
$metadata->image = $this->proxize($metadata->image);
|
|
||||||
|
|
||||||
return $metadata;
|
return $metadata;
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_str(parse_url($url, PHP_URL_QUERY), $params);
|
|
||||||
$illustId = $params['illust_id'];
|
|
||||||
$page = 0;
|
$page = 0;
|
||||||
|
if (preg_match('~www\.pixiv\.net/artworks/(\d+)~', $url, $matches)) {
|
||||||
|
$illustId = $matches[1];
|
||||||
|
} else {
|
||||||
|
parse_str(parse_url($url, PHP_URL_QUERY), $params);
|
||||||
|
$illustId = $params['illust_id'];
|
||||||
|
|
||||||
// 漫画ページ(ページ数はmanga_bigならあるかも)
|
// 漫画ページ(ページ数はmanga_bigならあるかも)
|
||||||
if ($params['mode'] === 'manga_big' || $params['mode'] === 'manga') {
|
if ($params['mode'] === 'manga_big' || $params['mode'] === 'manga') {
|
||||||
$page = $params['page'] ?? 0;
|
$page = $params['page'] ?? 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$res = $this->client->get('https://www.pixiv.net/ajax/illust/' . $illustId);
|
$res = $this->client->get('https://www.pixiv.net/ajax/illust/' . $illustId);
|
||||||
if ($res->getStatusCode() === 200) {
|
$json = json_decode($res->getBody()->getContents(), true);
|
||||||
$json = json_decode($res->getBody()->getContents(), true);
|
$metadata = new Metadata();
|
||||||
$metadata = new Metadata();
|
|
||||||
|
|
||||||
$metadata->title = $json['body']['illustTitle'] ?? '';
|
$metadata->title = $json['body']['illustTitle'] ?? '';
|
||||||
$metadata->description = '投稿者: ' . $json['body']['userName'] . PHP_EOL . strip_tags(str_replace('<br />', PHP_EOL, $json['body']['illustComment'] ?? ''));
|
$metadata->description = '投稿者: ' . $json['body']['userName'] . PHP_EOL . strip_tags(str_replace('<br />', PHP_EOL, $json['body']['illustComment'] ?? ''));
|
||||||
$metadata->image = $this->proxize($json['body']['urls']['regular'] ?? '');
|
$metadata->image = $this->proxize($json['body']['urls']['regular'] ?? '');
|
||||||
|
|
||||||
// ページ数の指定がある場合は画像URLをそのページにする
|
// ページ数の指定がある場合は画像URLをそのページにする
|
||||||
if ($page != 0) {
|
if ($page != 0) {
|
||||||
$metadata->image = str_replace('_p0', '_p'.$page, $metadata->image);
|
$metadata->image = str_replace('_p0', '_p' . $page, $metadata->image);
|
||||||
}
|
}
|
||||||
|
|
||||||
// タグ
|
// タグ
|
||||||
if (!empty($json['body']['tags']['tags'])) {
|
if (!empty($json['body']['tags']['tags'])) {
|
||||||
foreach ($json['body']['tags']['tags'] as $tag) {
|
foreach ($json['body']['tags']['tags'] as $tag) {
|
||||||
// 一部の固定キーワードは無視
|
// 一部の固定キーワードは無視
|
||||||
if (array_search($tag['tag'], ['R-18', 'イラスト', 'pixiv', 'ピクシブ'], true) === false) {
|
if (array_search($tag['tag'], ['R-18', 'イラスト', 'pixiv', 'ピクシブ'], true) === false) {
|
||||||
$metadata->tags[] = preg_replace('/\s/', '_', $tag['tag']);
|
$metadata->tags[] = preg_replace('/\s/', '_', $tag['tag']);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,21 +24,17 @@ class PlurkResolver implements Resolver
|
|||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$dom = new \DOMDocument();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
||||||
$xpath = new \DOMXPath($dom);
|
$xpath = new \DOMXPath($dom);
|
||||||
$imageNode = $xpath->query('//div[@class="text_holder"]/a[1]')->item(0);
|
$imageNode = $xpath->query('//div[@class="text_holder"]/a[1]')->item(0);
|
||||||
|
|
||||||
if ($imageNode) {
|
if ($imageNode) {
|
||||||
$metadata->image = $imageNode->getAttribute('href');
|
$metadata->image = $imageNode->getAttribute('href');
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,21 +24,17 @@ class SteamResolver implements Resolver
|
|||||||
$appid = $matches[1];
|
$appid = $matches[1];
|
||||||
|
|
||||||
$res = $this->client->get('https://store.steampowered.com/api/appdetails/?l=japanese&appids=' . $appid);
|
$res = $this->client->get('https://store.steampowered.com/api/appdetails/?l=japanese&appids=' . $appid);
|
||||||
if ($res->getStatusCode() === 200) {
|
$json = json_decode($res->getBody()->getContents(), true);
|
||||||
$json = json_decode($res->getBody()->getContents(), true);
|
if ($json[$appid]['success'] === false) {
|
||||||
if ($json[$appid]['success'] === false) {
|
throw new \RuntimeException("API response [$appid][success] is false: $url");
|
||||||
throw new \RuntimeException("API response [$appid][success] is false: $url");
|
|
||||||
}
|
|
||||||
$data = $json[$appid]['data'];
|
|
||||||
$metadata = new Metadata();
|
|
||||||
|
|
||||||
$metadata->title = $data['name'] ?? '';
|
|
||||||
$metadata->description = strip_tags(str_replace('<br />', PHP_EOL, html_entity_decode($data['short_description'] ?? '')));
|
|
||||||
$metadata->image = $data['header_image'] ?? '';
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
$data = $json[$appid]['data'];
|
||||||
|
$metadata = new Metadata();
|
||||||
|
|
||||||
|
$metadata->title = $data['name'] ?? '';
|
||||||
|
$metadata->description = strip_tags(str_replace('<br />', PHP_EOL, html_entity_decode($data['short_description'] ?? '')));
|
||||||
|
$metadata->image = $data['header_image'] ?? '';
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,20 +25,16 @@ class ToranoanaResolver implements Resolver
|
|||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
$res = $this->client->get($url);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$metadata = $this->ogpResolver->parse($res->getBody());
|
||||||
$metadata = $this->ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
$dom = new \DOMDocument();
|
$dom = new \DOMDocument();
|
||||||
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
|
||||||
$xpath = new \DOMXPath($dom);
|
$xpath = new \DOMXPath($dom);
|
||||||
$imgNode = $xpath->query('//*[@id="preview"]//img')->item(0);
|
$imgNode = $xpath->query('//*[@id="preview"]//img')->item(0);
|
||||||
if ($imgNode !== null) {
|
if ($imgNode !== null) {
|
||||||
$metadata->image = $imgNode->getAttribute('src');
|
$metadata->image = $imgNode->getAttribute('src');
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace App\MetadataResolver;
|
namespace App\MetadataResolver;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
class XtubeResolver implements Resolver
|
class XtubeResolver implements Resolver
|
||||||
{
|
{
|
||||||
@@ -10,32 +11,34 @@ class XtubeResolver implements Resolver
|
|||||||
* @var Client
|
* @var Client
|
||||||
*/
|
*/
|
||||||
private $client;
|
private $client;
|
||||||
|
/**
|
||||||
|
* @var OGPResolver
|
||||||
|
*/
|
||||||
|
private $ogpResolver;
|
||||||
|
|
||||||
public function __construct(Client $client)
|
public function __construct(Client $client, OGPResolver $ogpResolver)
|
||||||
{
|
{
|
||||||
$this->client = $client;
|
$this->client = $client;
|
||||||
|
$this->ogpResolver = $ogpResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resolve(string $url): Metadata
|
public function resolve(string $url): Metadata
|
||||||
{
|
{
|
||||||
if (preg_match('~www\.xtube\.com/video-watch/.*-(\d+)$~', $url, $matches) !== 1) {
|
if (preg_match('~www\.xtube\.com/video-watch/.*-(\d+)$~', $url) !== 1) {
|
||||||
throw new \RuntimeException("Unmatched URL Pattern: $url");
|
throw new \RuntimeException("Unmatched URL Pattern: $url");
|
||||||
}
|
}
|
||||||
$videoid = $matches[1];
|
|
||||||
|
|
||||||
$res = $this->client->get('https://www.xtube.com/webmaster/api/getvideobyid?video_id=' . $videoid);
|
$res = $this->client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
$html = (string) $res->getBody();
|
||||||
$data = json_decode($res->getBody()->getContents(), true);
|
$metadata = $this->ogpResolver->parse($html);
|
||||||
$metadata = new Metadata();
|
$crawler = new Crawler($html);
|
||||||
|
|
||||||
$metadata->title = $data['title'] ?? '';
|
$metadata->title = trim($crawler->filter('.underPlayerRateForm h1')->text(''));
|
||||||
$metadata->description = strip_tags(str_replace('\n', PHP_EOL, html_entity_decode($data['description'] ?? '')));
|
$metadata->description = trim($crawler->filter('.fullDescription ')->text(''));
|
||||||
$metadata->image = str_replace('eSuQ8f', 'eSK08f', $data['thumb'] ?? ''); // 300x169 to 300x210
|
$metadata->image = str_replace('m=eSuQ8f', 'm=eaAaaEFb', $metadata->image);
|
||||||
$metadata->tags = array_values(array_unique($data['tags']));
|
$metadata->image = str_replace('240X180', 'original', $metadata->image);
|
||||||
|
$metadata->tags = array_map('trim', $crawler->filter('.tagsCategories a')->extract('_text'));
|
||||||
|
|
||||||
return $metadata;
|
return $metadata;
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
app/Policies/EjaculationPolicy.php
Normal file
27
app/Policies/EjaculationPolicy.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Policies;
|
||||||
|
|
||||||
|
use App\Ejaculation;
|
||||||
|
use App\User;
|
||||||
|
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||||
|
|
||||||
|
class EjaculationPolicy
|
||||||
|
{
|
||||||
|
use HandlesAuthorization;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new policy instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
public function edit(User $user, Ejaculation $ejaculation): bool
|
||||||
|
{
|
||||||
|
return $user->id === $ejaculation->user_id;
|
||||||
|
}
|
||||||
|
}
|
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Ejaculation;
|
||||||
|
use App\Policies\EjaculationPolicy;
|
||||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
|
|
||||||
@@ -14,6 +16,7 @@ class AuthServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
protected $policies = [
|
protected $policies = [
|
||||||
'App\Model' => 'App\Policies\ModelPolicy',
|
'App\Model' => 'App\Policies\ModelPolicy',
|
||||||
|
Ejaculation::class => EjaculationPolicy::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -13,7 +13,9 @@
|
|||||||
"laravel/framework": "5.5.*",
|
"laravel/framework": "5.5.*",
|
||||||
"laravel/tinker": "~1.0",
|
"laravel/tinker": "~1.0",
|
||||||
"misd/linkify": "^1.1",
|
"misd/linkify": "^1.1",
|
||||||
"staudenmeir/eloquent-eager-limit": "^1.0"
|
"staudenmeir/eloquent-eager-limit": "^1.0",
|
||||||
|
"symfony/css-selector": "^4.3",
|
||||||
|
"symfony/dom-crawler": "^4.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"barryvdh/laravel-debugbar": "^3.1",
|
"barryvdh/laravel-debugbar": "^3.1",
|
||||||
|
1298
composer.lock
generated
1298
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddIsTooSensitiveToEjaculations extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('ejaculations', function (Blueprint $table) {
|
||||||
|
$table->boolean('is_too_sensitive')->default(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('ejaculations', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('is_too_sensitive');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@@ -17,6 +17,7 @@
|
|||||||
"chart.js": "^2.7.1",
|
"chart.js": "^2.7.1",
|
||||||
"cross-env": "^5.2.0",
|
"cross-env": "^5.2.0",
|
||||||
"date-fns": "^1.30.1",
|
"date-fns": "^1.30.1",
|
||||||
|
"grapheme-splitter": "^1.0.4",
|
||||||
"husky": "^1.3.1",
|
"husky": "^1.3.1",
|
||||||
"jquery": "^3.2.1",
|
"jquery": "^3.2.1",
|
||||||
"js-cookie": "^2.2.0",
|
"js-cookie": "^2.2.0",
|
||||||
|
11
resources/assets/js/app.js
vendored
11
resources/assets/js/app.js
vendored
@@ -85,6 +85,9 @@ $(() => {
|
|||||||
if (xhr.status === 409) {
|
if (xhr.status === 409) {
|
||||||
callback(JSON.parse(xhr.responseText));
|
callback(JSON.parse(xhr.responseText));
|
||||||
return;
|
return;
|
||||||
|
} else if (xhr.status === 401) {
|
||||||
|
alert('いいねするためにはログインしてください。');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.error(xhr);
|
console.error(xhr);
|
||||||
@@ -92,4 +95,10 @@ $(() => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
$(document).on('click', '.card-spoiler-overlay', function (event) {
|
||||||
|
const $this = $(this);
|
||||||
|
$this.siblings(".card-link").removeClass("card-spoiler");
|
||||||
|
$this.remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import TagInput from "./components/TagInput.vue";
|
import TagInput from "./components/TagInput.vue";
|
||||||
import MetadataPreview from './components/MetadataPreview.vue';
|
import MetadataPreview from './components/MetadataPreview.vue';
|
||||||
|
import GraphemeSplitter from "grapheme-splitter";
|
||||||
|
|
||||||
export const bus = new Vue({name: "EventBus"});
|
export const bus = new Vue({name: "EventBus"});
|
||||||
|
|
||||||
@@ -16,6 +17,7 @@ new Vue({
|
|||||||
data: {
|
data: {
|
||||||
metadata: null,
|
metadata: null,
|
||||||
metadataLoadState: MetadataLoadState.Inactive,
|
metadataLoadState: MetadataLoadState.Inactive,
|
||||||
|
noteLength: 0
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
TagInput,
|
TagInput,
|
||||||
@@ -28,6 +30,16 @@ new Vue({
|
|||||||
this.fetchMetadata(linkInput.value);
|
this.fetchMetadata(linkInput.value);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
noteLength: (length: number) => {
|
||||||
|
const counter = document.querySelector<HTMLElement>(
|
||||||
|
"#note-character-counter"
|
||||||
|
);
|
||||||
|
if (counter) {
|
||||||
|
counter.innerText = `残り ${500 - length} 文字`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// オカズリンクの変更時
|
// オカズリンクの変更時
|
||||||
onChangeLink(event: Event) {
|
onChangeLink(event: Event) {
|
||||||
@@ -43,6 +55,14 @@ new Vue({
|
|||||||
this.fetchMetadata(url);
|
this.fetchMetadata(url);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
onChangeNote(event: Event) {
|
||||||
|
if (event.target instanceof HTMLTextAreaElement) {
|
||||||
|
const splitter = new GraphemeSplitter();
|
||||||
|
this.noteLength = splitter.splitGraphemes(
|
||||||
|
event.target.value
|
||||||
|
).length;
|
||||||
|
}
|
||||||
|
},
|
||||||
// メタデータの取得
|
// メタデータの取得
|
||||||
fetchMetadata(url: string) {
|
fetchMetadata(url: string) {
|
||||||
this.metadataLoadState = MetadataLoadState.Loading;
|
this.metadataLoadState = MetadataLoadState.Loading;
|
||||||
|
@@ -46,6 +46,14 @@
|
|||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
break;
|
break;
|
||||||
|
case 'Unidentified':
|
||||||
|
// 実際にテキストボックスに入力されている文字を見に行く (フォールバック処理)
|
||||||
|
if (event.srcElement && (event.srcElement as HTMLInputElement).value.slice(-1) == ' ') {
|
||||||
|
this.tags.push(this.buffer);
|
||||||
|
this.buffer = "";
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else if (event.key === "Enter") {
|
} else if (event.key === "Enter") {
|
||||||
// 誤爆防止
|
// 誤爆防止
|
||||||
|
3
resources/assets/sass/app.scss
vendored
3
resources/assets/sass/app.scss
vendored
@@ -13,3 +13,6 @@ $primary: #e53fb1;
|
|||||||
// Components
|
// Components
|
||||||
@import "components/ejaculation";
|
@import "components/ejaculation";
|
||||||
@import "components/link-card";
|
@import "components/link-card";
|
||||||
|
|
||||||
|
// Tag
|
||||||
|
@import "tag/index";
|
||||||
|
23
resources/assets/sass/components/_link-card.scss
vendored
23
resources/assets/sass/components/_link-card.scss
vendored
@@ -30,4 +30,27 @@
|
|||||||
.card-text {
|
.card-text {
|
||||||
white-space: pre-line;
|
white-space: pre-line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.card-spoiler-overlay {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1000;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.warning-text {
|
||||||
|
padding: 10px;
|
||||||
|
user-select: none;
|
||||||
|
background-color: rgba(240, 240, 240, 0.8);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-spoiler {
|
||||||
|
z-index: 1;
|
||||||
|
filter: blur(15px) grayscale(100%);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
22
resources/assets/sass/tag/_index.scss
vendored
Normal file
22
resources/assets/sass/tag/_index.scss
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
.tags {
|
||||||
|
& > .btn-tag {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.tag-name {
|
||||||
|
display: inline-block;
|
||||||
|
max-width: 80%;
|
||||||
|
overflow: hidden;
|
||||||
|
line-height: 40px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkins-count {
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 40px;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -24,6 +24,7 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name"><span class="oi oi-person"></span> ユーザー名</label>
|
<label for="name"><span class="oi oi-person"></span> ユーザー名</label>
|
||||||
<input id="name" name="name" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" type="text" value="{{ old('name') }}" required>
|
<input id="name" name="name" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" type="text" value="{{ old('name') }}" required>
|
||||||
|
<small class="form-text text-muted">半角英数字と一部記号が使用できます。一度決めたら変更できません。</small>
|
||||||
|
|
||||||
@if ($errors->has('name'))
|
@if ($errors->has('name'))
|
||||||
<div class="invalid-feedback">{{ $errors->first('name') }}</div>
|
<div class="invalid-feedback">{{ $errors->first('name') }}</div>
|
||||||
@@ -81,4 +82,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
<!-- okazu link -->
|
<!-- okazu link -->
|
||||||
@if (!empty($ejaculation->link))
|
@if (!empty($ejaculation->link))
|
||||||
<div class="row mx-0">
|
<div class="row mx-0">
|
||||||
@component('components.link-card', ['link' => $ejaculation->link])
|
@component('components.link-card', ['link' => $ejaculation->link, 'is_too_sensitive' => $ejaculation->is_too_sensitive])
|
||||||
@endcomponent
|
@endcomponent
|
||||||
<p class="d-flex align-items-baseline mb-2 col-12 px-0">
|
<p class="d-flex align-items-baseline mb-2 col-12 px-0">
|
||||||
<span class="oi oi-link-intact mr-1"></span><a class="overflow-hidden" href="{{ $ejaculation->link }}" target="_blank" rel="noopener">{{ $ejaculation->link }}</a>
|
<span class="oi oi-link-intact mr-1"></span><a class="overflow-hidden" href="{{ $ejaculation->link }}" target="_blank" rel="noopener">{{ $ejaculation->link }}</a>
|
||||||
@@ -49,8 +49,8 @@
|
|||||||
<div class="ejaculation-actions">
|
<div class="ejaculation-actions">
|
||||||
<button type="button" class="btn btn-link text-secondary"
|
<button type="button" class="btn btn-link text-secondary"
|
||||||
data-toggle="tooltip" data-placement="bottom"
|
data-toggle="tooltip" data-placement="bottom"
|
||||||
title="同じオカズでチェックイン" data-href="{{ route('checkin', ['link' => $ejaculation->link, 'tags' => $ejaculation->textTags()]) }}"><span class="oi oi-reload"></span></button>
|
title="同じオカズでチェックイン" data-href="{{ $ejaculation->makeCheckinURL() }}"><span class="oi oi-reload"></span></button>
|
||||||
<button type="button" class="btn btn-link text-secondary like-button"
|
<button type="button" class="btn btn-link text-secondary like-button"
|
||||||
data-toggle="tooltip" data-placement="bottom" data-trigger="hover"
|
data-toggle="tooltip" data-placement="bottom" data-trigger="hover"
|
||||||
title="いいね" data-id="{{ $ejaculation->id }}" data-liked="{{ (bool)$ejaculation->is_liked }}"><span class="oi oi-heart {{ $ejaculation->is_liked ? 'text-danger' : '' }}"></span><span class="like-count">{{ $ejaculation->likes_count ? $ejaculation->likes_count : '' }}</span></button>
|
title="いいね" data-id="{{ $ejaculation->id }}" data-liked="{{ (bool)$ejaculation->is_liked }}"><span class="oi oi-heart {{ $ejaculation->is_liked ? 'text-danger' : '' }}"></span><span class="like-count">{{ $ejaculation->likes_count ? $ejaculation->likes_count : '' }}</span></button>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
<div class="card link-card mb-2 px-0 col-12 d-none" style="font-size: small;">
|
<div class="card link-card mb-2 px-0 col-12 d-none" style="font-size: small;">
|
||||||
<a class="text-dark card-link" href="{{ $link }}" target="_blank" rel="noopener">
|
@if ($is_too_sensitive)
|
||||||
|
<div class="card-spoiler-overlay">
|
||||||
|
<span class="warning-text">クリックまたはタップで表示</span>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
<a class="text-dark card-link {{ $is_too_sensitive ? 'card-spoiler' : '' }}" href="{{ $link }}" target="_blank" rel="noopener">
|
||||||
<div class="row no-gutters">
|
<div class="row no-gutters">
|
||||||
<div class="col-12 col-md-6 justify-content-center align-items-center">
|
<div class="col-12 col-md-6 justify-content-center align-items-center">
|
||||||
<img src="" alt="Thumbnail" class="w-100 bg-secondary">
|
<img src="" alt="Thumbnail" class="w-100 bg-secondary">
|
||||||
|
@@ -67,8 +67,8 @@
|
|||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="form-group col-sm-12">
|
<div class="form-group col-sm-12">
|
||||||
<label for="note"><span class="oi oi-comment-square"></span> ノート</label>
|
<label for="note"><span class="oi oi-comment-square"></span> ノート</label>
|
||||||
<textarea id="note" name="note" class="form-control {{ $errors->has('note') ? ' is-invalid' : '' }}" rows="4">{{ old('note') ?? $defaults['note'] }}</textarea>
|
<textarea id="note" name="note" class="form-control {{ $errors->has('note') ? ' is-invalid' : '' }}" rows="4" v-on:input="onChangeNote">{{ old('note') ?? $defaults['note'] }}</textarea>
|
||||||
<small class="form-text text-muted">
|
<small id="note-character-counter" class="form-text text-muted">
|
||||||
最大 500 文字
|
最大 500 文字
|
||||||
</small>
|
</small>
|
||||||
@if ($errors->has('note'))
|
@if ($errors->has('note'))
|
||||||
@@ -85,6 +85,12 @@
|
|||||||
<span class="oi oi-lock-locked"></span> このチェックインを非公開にする
|
<span class="oi oi-lock-locked"></span> このチェックインを非公開にする
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="custom-control custom-checkbox mb-3">
|
||||||
|
<input id="isTooSensitive" name="is_too_sensitive" type="checkbox" class="custom-control-input" {{ old('is_too_sensitive') || $defaults['is_too_sensitive'] ? 'checked' : '' }}>
|
||||||
|
<label class="custom-control-label" for="isTooSensitive">
|
||||||
|
<span class="oi oi-warning"></span> チェックイン対象のオカズをより過激なオカズとして設定する
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -68,8 +68,8 @@
|
|||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="form-group col-sm-12">
|
<div class="form-group col-sm-12">
|
||||||
<label for="note"><span class="oi oi-comment-square"></span> ノート</label>
|
<label for="note"><span class="oi oi-comment-square"></span> ノート</label>
|
||||||
<textarea id="note" name="note" class="form-control {{ $errors->has('note') ? ' is-invalid' : '' }}" rows="4">{{ old('note') ?? $ejaculation->note }}</textarea>
|
<textarea id="note" name="note" class="form-control {{ $errors->has('note') ? ' is-invalid' : '' }}" rows="4" v-on:input="onChangeNote">{{ old('note') ?? $ejaculation->note }}</textarea>
|
||||||
<small class="form-text text-muted">
|
<small id="note-character-counter" class="form-text text-muted">
|
||||||
最大 500 文字
|
最大 500 文字
|
||||||
</small>
|
</small>
|
||||||
@if ($errors->has('note'))
|
@if ($errors->has('note'))
|
||||||
@@ -86,6 +86,12 @@
|
|||||||
<span class="oi oi-lock-locked"></span> このチェックインを非公開にする
|
<span class="oi oi-lock-locked"></span> このチェックインを非公開にする
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="custom-control custom-checkbox mb-3">
|
||||||
|
<input id="isTooSensitive" name="is_too_sensitive" type="checkbox" class="custom-control-input" {{ (is_bool(old('is_too_sensitive')) ? old('is_too_sensitive') : $ejaculation->is_too_sensitive) ? 'checked' : '' }}>
|
||||||
|
<label class="custom-control-label" for="isTooSensitive">
|
||||||
|
<span class="oi oi-warning"></span> チェックイン対象のオカズをより過激なオカズとして設定する
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -47,7 +47,7 @@
|
|||||||
<!-- okazu link -->
|
<!-- okazu link -->
|
||||||
@if (!empty($ejaculation->link))
|
@if (!empty($ejaculation->link))
|
||||||
<div class="row mx-0">
|
<div class="row mx-0">
|
||||||
@component('components.link-card', ['link' => $ejaculation->link])
|
@component('components.link-card', ['link' => $ejaculation->link, 'is_too_sensitive' => $ejaculation->is_too_sensitive])
|
||||||
@endcomponent
|
@endcomponent
|
||||||
<p class="d-flex align-items-baseline mb-2 col-12 px-0">
|
<p class="d-flex align-items-baseline mb-2 col-12 px-0">
|
||||||
<span class="oi oi-link-intact mr-1"></span><a class="overflow-hidden" href="{{ $ejaculation->link }}" target="_blank" rel="noopener">{{ $ejaculation->link }}</a>
|
<span class="oi oi-link-intact mr-1"></span><a class="overflow-hidden" href="{{ $ejaculation->link }}" target="_blank" rel="noopener">{{ $ejaculation->link }}</a>
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
@endif
|
@endif
|
||||||
<!-- actions -->
|
<!-- actions -->
|
||||||
<div class="ejaculation-actions">
|
<div class="ejaculation-actions">
|
||||||
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="同じオカズでチェックイン" data-href="{{ route('checkin', ['link' => $ejaculation->link, 'tags' => $ejaculation->textTags()]) }}"><span class="oi oi-reload"></span></button>
|
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="同じオカズでチェックイン" data-href="{{ $ejaculation->makeCheckinURL() }}"><span class="oi oi-reload"></span></button>
|
||||||
<button type="button" class="btn btn-link text-secondary like-button" data-toggle="tooltip" data-placement="bottom" data-trigger="hover" title="いいね" data-id="{{ $ejaculation->id }}" data-liked="{{ (bool)$ejaculation->is_liked }}"><span class="oi oi-heart {{ $ejaculation->is_liked ? 'text-danger' : '' }}"></span><span class="like-count">{{ $ejaculation->likes_count ? $ejaculation->likes_count : '' }}</span></button>
|
<button type="button" class="btn btn-link text-secondary like-button" data-toggle="tooltip" data-placement="bottom" data-trigger="hover" title="いいね" data-id="{{ $ejaculation->id }}" data-liked="{{ (bool)$ejaculation->is_liked }}"><span class="oi oi-heart {{ $ejaculation->is_liked ? 'text-danger' : '' }}"></span><span class="like-count">{{ $ejaculation->likes_count ? $ejaculation->likes_count : '' }}</span></button>
|
||||||
@if ($user->isMe())
|
@if ($user->isMe())
|
||||||
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="修正" data-href="{{ route('checkin.edit', ['id' => $ejaculation->id]) }}"><span class="oi oi-pencil"></span></button>
|
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="修正" data-href="{{ route('checkin.edit', ['id' => $ejaculation->id]) }}"><span class="oi oi-pencil"></span></button>
|
||||||
|
@@ -54,6 +54,9 @@
|
|||||||
<a href="{{ route('user.likes', ['name' => Auth::user()->name]) }}" class="dropdown-item">いいね</a>
|
<a href="{{ route('user.likes', ['name' => Auth::user()->name]) }}" class="dropdown-item">いいね</a>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
<a href="{{ route('setting') }}" class="dropdown-item">設定</a>
|
<a href="{{ route('setting') }}" class="dropdown-item">設定</a>
|
||||||
|
@can ('admin')
|
||||||
|
<a href="{{ route('admin.dashboard') }}" class="dropdown-item">管理</a>
|
||||||
|
@endcan
|
||||||
<a href="{{ route('logout') }}" class="dropdown-item" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">ログアウト</a>
|
<a href="{{ route('logout') }}" class="dropdown-item" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">ログアウト</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -79,6 +82,9 @@
|
|||||||
<li class="nav-item {{ stripos(Route::currentRouteName(), 'user.okazu') === 0 ? 'active' : ''}}">
|
<li class="nav-item {{ stripos(Route::currentRouteName(), 'user.okazu') === 0 ? 'active' : ''}}">
|
||||||
<a class="nav-link" href="{{ route('user.okazu', ['name' => Auth::user()->name]) }}">オカズ</a>
|
<a class="nav-link" href="{{ route('user.okazu', ['name' => Auth::user()->name]) }}">オカズ</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item {{ stripos(Route::currentRouteName(), 'tag') === 0 ? 'active' : ''}}">
|
||||||
|
<a class="nav-link" href="{{ route('tag') }}">タグ一覧</a>
|
||||||
|
</li>
|
||||||
{{--<li class="nav-item">
|
{{--<li class="nav-item">
|
||||||
<a class="nav-link" href="{{ route('ranking') }}">ランキング</a>
|
<a class="nav-link" href="{{ route('ranking') }}">ランキング</a>
|
||||||
</li>--}}
|
</li>--}}
|
||||||
@@ -137,6 +143,13 @@
|
|||||||
<a class="btn btn-{{ stripos(Route::currentRouteName(), 'user.okazu') === 0 ? 'primary' : 'outline-secondary'}}" href="{{ route('user.okazu', ['name' => Auth::user()->name]) }}" role="button">オカズ</a>
|
<a class="btn btn-{{ stripos(Route::currentRouteName(), 'user.okazu') === 0 ? 'primary' : 'outline-secondary'}}" href="{{ route('user.okazu', ['name' => Auth::user()->name]) }}" role="button">オカズ</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mt-2">
|
||||||
|
<div class="col">
|
||||||
|
<a class="btn btn-{{ stripos(Route::currentRouteName(), 'tag') === 0 ? 'primary' : 'outline-secondary'}}" href="{{ route('tag') }}" role="button">タグ一覧</a>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{-- <div class="row mt-2">
|
{{-- <div class="row mt-2">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<a class="btn btn-outline-secondary" href="{{ route('ranking') }}">ランキング</a>
|
<a class="btn btn-outline-secondary" href="{{ route('ranking') }}">ランキング</a>
|
||||||
|
@@ -29,12 +29,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<input id="name" name="name" type="text" class="form-control" value="{{ Auth::user()->name }}" disabled>
|
<input id="name" name="name" type="text" class="form-control" value="{{ Auth::user()->name }}" disabled>
|
||||||
</div>
|
</div>
|
||||||
<small class="form-text text-muted">現在は変更できません。</small>
|
<small class="form-text text-muted">変更することはできません。</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="from-group mt-3">
|
<div class="from-group mt-3">
|
||||||
<label for="name">メールアドレス</label>
|
<label for="email">メールアドレス</label>
|
||||||
<input id="name" name="name" type="text" class="form-control" value="{{ Auth::user()->email }}" disabled>
|
<input id="email" name="email" type="email" class="form-control {{ $errors->has('email') ? ' is-invalid' : '' }}" value="{{ old('email') ?? Auth::user()->email }}">
|
||||||
<small class="form-text text-muted">現在は変更できません。</small>
|
|
||||||
|
@if ($errors->has('email'))
|
||||||
|
<div class="invalid-feedback">{{ $errors->first('email') }}</div>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group mt-3">
|
<div class="form-group mt-3">
|
||||||
<label for="bio">自己紹介</label>
|
<label for="bio">自己紹介</label>
|
||||||
|
20
resources/views/tag/index.blade.php
Normal file
20
resources/views/tag/index.blade.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
@extends('layouts.base')
|
||||||
|
|
||||||
|
@section('title', 'タグ一覧')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container pb-1">
|
||||||
|
<h2 class="mb-3">タグ一覧</h2>
|
||||||
|
<p class="text-secondary">公開チェックインに付けられているタグを、チェックイン数の多い順で表示しています。</p>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row mx-1">
|
||||||
|
@foreach($tags as $tag)
|
||||||
|
<div class="col-12 col-lg-6 col-xl-3 py-3 text-break tags">
|
||||||
|
<a href="{{ route('search', ['q' => $tag->name]) }}" class="btn btn-outline-primary btn-tag" title="{{ $tag->name }}"><span class="tag-name">{{ $tag->name }}</span> <span class="checkins-count">({{ $tag->checkins_count }})</span></a>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
{{ $tags->links(null, ['className' => 'mt-4 justify-content-center']) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
@@ -53,7 +53,7 @@
|
|||||||
<!-- okazu link -->
|
<!-- okazu link -->
|
||||||
@if (!empty($ejaculation->link))
|
@if (!empty($ejaculation->link))
|
||||||
<div class="row mx-0">
|
<div class="row mx-0">
|
||||||
@component('components.link-card', ['link' => $ejaculation->link])
|
@component('components.link-card', ['link' => $ejaculation->link, 'is_too_sensitive' => $ejaculation->is_too_sensitive])
|
||||||
@endcomponent
|
@endcomponent
|
||||||
<p class="d-flex align-items-baseline mb-2 col-12 px-0">
|
<p class="d-flex align-items-baseline mb-2 col-12 px-0">
|
||||||
<span class="oi oi-link-intact mr-1"></span><a class="overflow-hidden" href="{{ $ejaculation->link }}" target="_blank" rel="noopener">{{ $ejaculation->link }}</a>
|
<span class="oi oi-link-intact mr-1"></span><a class="overflow-hidden" href="{{ $ejaculation->link }}" target="_blank" rel="noopener">{{ $ejaculation->link }}</a>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
@endif
|
@endif
|
||||||
<!-- actions -->
|
<!-- actions -->
|
||||||
<div class="ejaculation-actions">
|
<div class="ejaculation-actions">
|
||||||
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="同じオカズでチェックイン" data-href="{{ route('checkin', ['link' => $ejaculation->link, 'tags' => $ejaculation->textTags()]) }}"><span class="oi oi-reload"></span></button>
|
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="同じオカズでチェックイン" data-href="{{ $ejaculation->makeCheckinURL() }}"><span class="oi oi-reload"></span></button>
|
||||||
<button type="button" class="btn btn-link text-secondary like-button" data-toggle="tooltip" data-placement="bottom" data-trigger="hover" title="いいね" data-id="{{ $ejaculation->id }}" data-liked="{{ (bool)$ejaculation->is_liked }}"><span class="oi oi-heart {{ $ejaculation->is_liked ? 'text-danger' : '' }}"></span><span class="like-count">{{ $ejaculation->likes_count ? $ejaculation->likes_count : '' }}</span></button>
|
<button type="button" class="btn btn-link text-secondary like-button" data-toggle="tooltip" data-placement="bottom" data-trigger="hover" title="いいね" data-id="{{ $ejaculation->id }}" data-liked="{{ (bool)$ejaculation->is_liked }}"><span class="oi oi-heart {{ $ejaculation->is_liked ? 'text-danger' : '' }}"></span><span class="like-count">{{ $ejaculation->likes_count ? $ejaculation->likes_count : '' }}</span></button>
|
||||||
@if ($user->isMe())
|
@if ($user->isMe())
|
||||||
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="修正" data-href="{{ route('checkin.edit', ['id' => $ejaculation->id]) }}"><span class="oi oi-pencil"></span></button>
|
<button type="button" class="btn btn-link text-secondary" data-toggle="tooltip" data-placement="bottom" title="修正" data-href="{{ route('checkin.edit', ['id' => $ejaculation->id]) }}"><span class="oi oi-pencil"></span></button>
|
||||||
|
@@ -46,6 +46,8 @@ Route::redirect('/search', '/search/checkin', 301);
|
|||||||
Route::get('/search/checkin', 'SearchController@index')->name('search');
|
Route::get('/search/checkin', 'SearchController@index')->name('search');
|
||||||
Route::get('/search/related-tag', 'SearchController@relatedTag')->name('search.related-tag');
|
Route::get('/search/related-tag', 'SearchController@relatedTag')->name('search.related-tag');
|
||||||
|
|
||||||
|
Route::get('/tag', 'TagController@index')->name('tag');
|
||||||
|
|
||||||
Route::middleware('can:admin')
|
Route::middleware('can:admin')
|
||||||
->namespace('Admin')
|
->namespace('Admin')
|
||||||
->prefix('admin')
|
->prefix('admin')
|
||||||
|
17
tests/MyAsserts.php
Normal file
17
tests/MyAsserts.php
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests;
|
||||||
|
|
||||||
|
trait MyAsserts
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* assertArraySubset()がdeprecatedって本当ですか? 配列の中に所定の値が全て含まれていることを検証します。
|
||||||
|
* @param array $expected
|
||||||
|
* @param array $actual
|
||||||
|
* @param string $message
|
||||||
|
*/
|
||||||
|
public function assertArrayContains(array $expected, array $actual, string $message = '')
|
||||||
|
{
|
||||||
|
$this->assertSame($expected, array_intersect($actual, $expected), $message);
|
||||||
|
}
|
||||||
|
}
|
48
tests/Unit/MetadataResolver/CienResolverTest.php
Normal file
48
tests/Unit/MetadataResolver/CienResolverTest.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
|
use App\MetadataResolver\CienResolver;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class CienResolverTest extends TestCase
|
||||||
|
{
|
||||||
|
use CreateMockedResolver;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!$this->shouldUseMock()) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Cien/test.html');
|
||||||
|
|
||||||
|
$this->createResolver(CienResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://ci-en.dlsite.com/creator/2462/article/87502');
|
||||||
|
$this->assertSame('進捗とボツ立ち絵', $metadata->title);
|
||||||
|
$this->assertSame('ドット製2D ACTを製作しています。' . PHP_EOL . '恐ろしい存在に襲われる絶望感や、被虐的な官能がテーマです。', $metadata->description);
|
||||||
|
$this->assertStringStartsWith('https://media.ci-en.jp/private/attachment/creator/00002462/a7afd3b02a6d1caa6afe6a3bf5550fb6a42aefba686f17a0a2f63c97fd6867ab/image-800.jpg?px-time=', $metadata->image);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://media.ci-en.jp/private/attachment/creator/00002462/a7afd3b02a6d1caa6afe6a3bf5550fb6a42aefba686f17a0a2f63c97fd6867ab/image-800.jpg?px-time=1568231879&px-hash=70c57e9a73d5afb4ac5363d1f37a851af8e0cb1f', $metadata->image);
|
||||||
|
$this->assertSame(1568235479, $metadata->expires_at->timestamp);
|
||||||
|
$this->assertSame('https://ci-en.dlsite.com/creator/2462/article/87502', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithNoTimestamp()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Cien/testWithNoTimestamp.html');
|
||||||
|
$this->createResolver(CienResolver::class, $responseText);
|
||||||
|
|
||||||
|
$this->expectException(\RuntimeException::class);
|
||||||
|
$this->expectExceptionMessage('Parameter "px-time" not found. Image=https://ci-en.dlsite.com/assets/img/common/logo_Ci-en_R18.svg Source=https://ci-en.dlsite.com/');
|
||||||
|
|
||||||
|
$this->resolver->resolve('https://ci-en.dlsite.com/');
|
||||||
|
}
|
||||||
|
}
|
@@ -5,6 +5,7 @@ namespace Tests\Unit\MetadataResolver;
|
|||||||
use App\MetadataResolver\Resolver;
|
use App\MetadataResolver\Resolver;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Handler\MockHandler;
|
use GuzzleHttp\Handler\MockHandler;
|
||||||
|
use GuzzleHttp\HandlerStack;
|
||||||
use GuzzleHttp\Psr7\Response;
|
use GuzzleHttp\Psr7\Response;
|
||||||
use Monolog\Handler\AbstractHandler;
|
use Monolog\Handler\AbstractHandler;
|
||||||
|
|
||||||
@@ -41,7 +42,7 @@ trait CreateMockedResolver
|
|||||||
|
|
||||||
$mockResponse = new Response($status, $headers, $responseText);
|
$mockResponse = new Response($status, $headers, $responseText);
|
||||||
$this->handler = new MockHandler([$mockResponse]);
|
$this->handler = new MockHandler([$mockResponse]);
|
||||||
$client = new Client(['handler' => $this->handler]);
|
$client = new Client(['handler' => HandlerStack::create($this->handler)]);
|
||||||
$this->resolver = app()->make($resolverClass, ['client' => $client]);
|
$this->resolver = app()->make($resolverClass, ['client' => $client]);
|
||||||
|
|
||||||
return $this->resolver;
|
return $this->resolver;
|
||||||
|
@@ -44,7 +44,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('ことのはアムリラート', $metadata->title);
|
$this->assertEquals('ことのはアムリラート', $metadata->title);
|
||||||
$this->assertEquals('メーカー名: SukeraSparo' . PHP_EOL . '異世界へと迷い込んだ凜に救いの手を差し伸べるルカ――。これは、ふたりが手探りの意思疎通(ことのは)で織りなす、もどかしくも純粋な……女の子同士の物語。', $metadata->description);
|
$this->assertEquals('メーカー名: SukeraSparo' . PHP_EOL . '異世界へと迷い込んだ凜に救いの手を差し伸べるルカ――。これは、ふたりが手探りの意思疎通(ことのは)で織りなす、もどかしくも純粋な……女の子同士の物語。', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/professional/VJ012000/VJ011276_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/professional/VJ012000/VJ011276_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['少女', '日常/生活', '純愛', '百合'], $metadata->tags);
|
$this->assertEquals(['日常/生活', '純愛', '百合', '少女'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/soft/work/=/product_id/VJ011276.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/soft/work/=/product_id/VJ011276.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('快楽ヒストリエ', $metadata->title);
|
$this->assertEquals('快楽ヒストリエ', $metadata->title);
|
||||||
$this->assertEquals('著者: 火鳥' . PHP_EOL . '天地創造と原初の人類を描いた「創世編」をはじめ、英雄たちの偉業を大真面目に考証した正真正銘の学術コミック全15編。', $metadata->description);
|
$this->assertEquals('著者: 火鳥' . PHP_EOL . '天地創造と原初の人類を描いた「創世編」をはじめ、英雄たちの偉業を大真面目に考証した正真正銘の学術コミック全15編。', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/books/BJ139000/BJ138581_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/books/BJ139000/BJ138581_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['おっぱい', 'ロリ', 'ショタ', '妹', '男性/おやじ', '女王様/お姫様', '王子様/王子系', '戦士', 'セーラー服', '着物/和服', '青年コミック', 'ギャグ', 'コメディ', '歴史/時代物', '褐色/日焼け', '爺'], $metadata->tags);
|
$this->assertEquals(['おっぱい', '青年コミック', 'ギャグ', 'コメディ', '歴史/時代物', 'ロリ', 'ショタ', '妹', '男性/おやじ', '女王様/お姫様', '王子様/王子系', '戦士', 'セーラー服', '着物/和服', '褐色/日焼け', '爺'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/comic/work/=/product_id/BJ138581.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/comic/work/=/product_id/BJ138581.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('催眠術で新婚人妻マナカさんとエッチしよう', $metadata->title);
|
$this->assertEquals('催眠術で新婚人妻マナカさんとエッチしよう', $metadata->title);
|
||||||
$this->assertEquals('サークル名: デルタブレード' . PHP_EOL . '催眠術で新婚人妻マナカさんの愛する夫にすり替わって子作りラブラブエッチをするCG集です。', $metadata->description);
|
$this->assertEquals('サークル名: デルタブレード' . PHP_EOL . '催眠術で新婚人妻マナカさんの愛する夫にすり替わって子作りラブラブエッチをするCG集です。', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ206000/RJ205445_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ206000/RJ205445_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['断面図', '人妻', '中出し', '妊娠/孕ませ', '催眠', '口内射精'], $metadata->tags);
|
$this->assertEquals(['断面図', '中出し', '妊娠/孕ませ', '催眠', '口内射精', '人妻'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/maniax/work/=/product_id/RJ205445.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/maniax/work/=/product_id/RJ205445.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('euphoria (HDリマスター) Best Price版', $metadata->title);
|
$this->assertEquals('euphoria (HDリマスター) Best Price版', $metadata->title);
|
||||||
$this->assertEquals('ブランド名: CLOCK UP' . PHP_EOL . 'インモラルハードコアADV「euphoria」が高解像度(1024×768)版、「euphoria HDリマスター」となって登場!', $metadata->description);
|
$this->assertEquals('ブランド名: CLOCK UP' . PHP_EOL . 'インモラルハードコアADV「euphoria」が高解像度(1024×768)版、「euphoria HDリマスター」となって登場!', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/professional/VJ009000/VJ008455_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/professional/VJ009000/VJ008455_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['アブノーマル', '幼なじみ', '女教師', '退廃/背徳/インモラル', '拘束', '強制/無理矢理', 'スカトロ', 'アヘ顔', '拷問', '血液/流血', '狂気'], $metadata->tags);
|
$this->assertEquals(['アブノーマル', 'アヘ顔', '退廃/背徳/インモラル', '拘束', '強制/無理矢理', 'スカトロ', '幼なじみ', '女教師', '拷問', '血液/流血', '狂気'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/pro/work/=/product_id/VJ008455.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/pro/work/=/product_id/VJ008455.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -106,9 +106,9 @@ class DLsiteResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://www.dlsite.com/books/work/=/product_id/BJ191317.html');
|
$metadata = $this->resolver->resolve('https://www.dlsite.com/books/work/=/product_id/BJ191317.html');
|
||||||
$this->assertEquals('永遠娘 vol.6', $metadata->title);
|
$this->assertEquals('永遠娘 vol.6', $metadata->title);
|
||||||
$this->assertEquals('著者: あまがえる / 玉之けだま / びんせん / 甘露アメ / 源五郎 / すみやお / 宇宙烏賊 / 毒茸人 / あやね / ガロウド / ハードボイルドよし子 / 夜歌 / 黒青郎君' . PHP_EOL . '君の命はどんな味なのだろうな?', $metadata->description);
|
$this->assertEquals('著者: あまがえる / 玉之けだま / びんせん / 甘露アメ / 源五郎 / すみやお / 宇宙烏賊 / 毒茸人 / あやね / ガロウド / ハードボイルドよし子 / 夜歌 / 黒青郎君' . PHP_EOL . '君の命はどんな味なのだろうな?', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/books/BJ192000/BJ191317_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/books/BJ192000/BJ191317_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['ツンデレ', 'ロリ', '妖怪', '人外娘/モンスター娘', 'セーラー服', 'メイド', 'ストッキング', 'ファンタジー', 'ぶっかけ', '中出し', '近親相姦', 'アヘ顔', '口内射精'], $metadata->tags);
|
$this->assertEquals(['アヘ顔', 'ファンタジー', 'ぶっかけ', '中出し', '近親相姦', '口内射精', 'ツンデレ', 'ロリ', '妖怪', '人外娘/モンスター娘', 'セーラー服', 'メイド', 'ストッキング'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/books/work/=/product_id/BJ191317.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/books/work/=/product_id/BJ191317.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('体イク教師', $metadata->title);
|
$this->assertEquals('体イク教師', $metadata->title);
|
||||||
$this->assertEquals('サークル名: Dusk' . PHP_EOL . '思い込みの激しい体育教師に執着されるお話', $metadata->description);
|
$this->assertEquals('サークル名: Dusk' . PHP_EOL . '思い込みの激しい体育教師に執着されるお話', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ218000/RJ217995_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ218000/RJ217995_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['教師', '中出し', '陵辱', '変態', '強制/無理矢理', 'レイプ'], $metadata->tags);
|
$this->assertEquals(['中出し', '陵辱', '変態', '強制/無理矢理', 'レイプ', '教師'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/girls/work/=/product_id/RJ217995.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/girls/work/=/product_id/RJ217995.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -140,7 +140,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('×××レクチャー', $metadata->title);
|
$this->assertEquals('×××レクチャー', $metadata->title);
|
||||||
$this->assertEquals('著者: 江口尋' . PHP_EOL . '昔、告白してくれた地味な同級生・瀬尾は超人気セクシー男優になっていて!?', $metadata->description);
|
$this->assertEquals('著者: 江口尋' . PHP_EOL . '昔、告白してくれた地味な同級生・瀬尾は超人気セクシー男優になっていて!?', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/books/BJ171000/BJ170641_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/books/BJ171000/BJ170641_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['メガネ', '芸能人/アイドル/モデル', '俺様', 'ラブコメ', 'ラブラブ/あまあま', 'ティーンズラブ', '調教', '褐色/日焼け'], $metadata->tags);
|
$this->assertEquals(['ラブコメ', 'ラブラブ/あまあま', 'ティーンズラブ', '調教', 'メガネ', '芸能人/アイドル/モデル', '俺様', '褐色/日焼け'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/girls-pro/work/=/product_id/BJ170641.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/girls-pro/work/=/product_id/BJ170641.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -156,7 +156,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('秘密に堕つ', $metadata->title);
|
$this->assertEquals('秘密に堕つ', $metadata->title);
|
||||||
$this->assertEquals('サークル名: ナゲットぶん投げ屋さん' . PHP_EOL . 'とある村に越してきた新婚夫婦。村の集会所で行われた歓迎会で犯される花婿。村の男達に犯され続けた花婿にある変化が…?', $metadata->description);
|
$this->assertEquals('サークル名: ナゲットぶん投げ屋さん' . PHP_EOL . 'とある村に越してきた新婚夫婦。村の集会所で行われた歓迎会で犯される花婿。村の男達に犯され続けた花婿にある変化が…?', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ245000/RJ244977_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ245000/RJ244977_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['既婚者', '中出し', '強制/無理矢理', 'レイプ', 'モブ姦'], $metadata->tags);
|
$this->assertEquals(['中出し', '強制/無理矢理', 'レイプ', 'モブ姦', '既婚者'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/bl/work/=/product_id/RJ244977.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/bl/work/=/product_id/RJ244977.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -172,7 +172,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]', $metadata->title);
|
$this->assertEquals('With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]', $metadata->title);
|
||||||
$this->assertEquals('Circle: Triangle!' . PHP_EOL . 'You go with a girl of your first love and enjoy going to haunted places and her massage, ear cleaning, sleep sharing etc. (CV: Yui Asami)', $metadata->description);
|
$this->assertEquals('Circle: Triangle!' . PHP_EOL . 'You go with a girl of your first love and enjoy going to haunted places and her massage, ear cleaning, sleep sharing etc. (CV: Yui Asami)', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ229000/RJ228866_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ229000/RJ228866_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['Healing', 'Binaural', 'ASMR', 'Childhood Friend', 'Ear Cleaning', 'Romance'], $metadata->tags);
|
$this->assertEquals(['Healing', 'Binaural', 'ASMR', 'Ear Cleaning', 'Lovey Dovey/Sweet Love', 'Childhood Friend'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/eng/work/=/product_id/RE228866.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/eng/work/=/product_id/RE228866.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -188,7 +188,7 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertEquals('NEKOPARA vol.1', $metadata->title);
|
$this->assertEquals('NEKOPARA vol.1', $metadata->title);
|
||||||
$this->assertEquals('Circle: NEKO WORKs' . PHP_EOL . 'Chocolat and Vanilla star in a rich adult eroge series with E-mote system and animated H scenes', $metadata->description);
|
$this->assertEquals('Circle: NEKO WORKs' . PHP_EOL . 'Chocolat and Vanilla star in a rich adult eroge series with E-mote system and animated H scenes', $metadata->description);
|
||||||
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ145000/RJ144678_img_main.jpg', $metadata->image);
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ145000/RJ144678_img_main.jpg', $metadata->image);
|
||||||
$this->assertEquals(['Moe', 'Master and Servant', 'Funny Love Story', 'Nekomimi (Cat Ears)'], $metadata->tags);
|
$this->assertEquals(['Moe', 'Love Comedy/Romcom', 'Master and Servant', 'Nekomimi (Cat Ears)'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.dlsite.com/ecchi-eng/work/=/product_id/RE144678.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.dlsite.com/ecchi-eng/work/=/product_id/RE144678.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -226,4 +226,94 @@ class DLsiteResolverTest extends TestCase
|
|||||||
$this->assertSame('https://dlsite.jp/howtw/RJ221761.html', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://dlsite.jp/howtw/RJ221761.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testOldAffiliateLink()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testHome.html');
|
||||||
|
|
||||||
|
$this->createResolver(DLsiteResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://www.dlsite.com/home/dlaf/=/link/work/aid/eai04191/id/RJ221761.html');
|
||||||
|
$this->assertEquals('ひつじ、数えてあげるっ', $metadata->title);
|
||||||
|
$this->assertEquals('サークル名: Butterfly Dream' . PHP_EOL . '眠れないあなたに彼女が羊を数えてくれる音声です。', $metadata->description);
|
||||||
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ222000/RJ221761_img_main.jpg', $metadata->image);
|
||||||
|
$this->assertEquals(['癒し', 'バイノーラル/ダミヘ', '日常/生活', 'ほのぼの', '恋人同士'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://www.dlsite.com/home/work/=/product_id/RJ221761.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSnsAffiliateLink()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testHome.html');
|
||||||
|
|
||||||
|
$this->createResolver(DLsiteResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://www.dlsite.com/home/dlaf/=/t/s/link/work/aid/eai04191/id/RJ221761.html');
|
||||||
|
$this->assertEquals('ひつじ、数えてあげるっ', $metadata->title);
|
||||||
|
$this->assertEquals('サークル名: Butterfly Dream' . PHP_EOL . '眠れないあなたに彼女が羊を数えてくれる音声です。', $metadata->description);
|
||||||
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ222000/RJ221761_img_main.jpg', $metadata->image);
|
||||||
|
$this->assertEquals(['癒し', 'バイノーラル/ダミヘ', '日常/生活', 'ほのぼの', '恋人同士'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://www.dlsite.com/home/work/=/product_id/RJ221761.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAffiliateLink()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testHome.html');
|
||||||
|
|
||||||
|
$this->createResolver(DLsiteResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://www.dlsite.com/home/dlaf/=/t/t/link/work/aid/eai04191/id/RJ221761.html');
|
||||||
|
$this->assertEquals('ひつじ、数えてあげるっ', $metadata->title);
|
||||||
|
$this->assertEquals('サークル名: Butterfly Dream' . PHP_EOL . '眠れないあなたに彼女が羊を数えてくれる音声です。', $metadata->description);
|
||||||
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ222000/RJ221761_img_main.jpg', $metadata->image);
|
||||||
|
$this->assertEquals(['癒し', 'バイノーラル/ダミヘ', '日常/生活', 'ほのぼの', '恋人同士'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://www.dlsite.com/home/work/=/product_id/RJ221761.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAffiliateUrl()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testHome.html');
|
||||||
|
|
||||||
|
$this->createResolver(DLsiteResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('http://www.dlsite.com/home/dlaf/=/aid/eai04191/url/https%3A%2F%2Fwww.dlsite.com%2Fhome%2Fwork%2F=%2Fproduct_id%2FRJ221761.html');
|
||||||
|
$this->assertEquals('ひつじ、数えてあげるっ', $metadata->title);
|
||||||
|
$this->assertEquals('サークル名: Butterfly Dream' . PHP_EOL . '眠れないあなたに彼女が羊を数えてくれる音声です。', $metadata->description);
|
||||||
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ222000/RJ221761_img_main.jpg', $metadata->image);
|
||||||
|
$this->assertEquals(['癒し', 'バイノーラル/ダミヘ', '日常/生活', 'ほのぼの', '恋人同士'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://www.dlsite.com/home/work/=/product_id/RJ221761.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAffiliateBadUrl()
|
||||||
|
{
|
||||||
|
$this->createResolver(DLsiteResolver::class, '');
|
||||||
|
|
||||||
|
$this->expectException(\RuntimeException::class);
|
||||||
|
$this->expectExceptionMessage('アフィリエイト先のリンクがDLsiteのタイトルではありません: https://www.dlsite.com/home/');
|
||||||
|
|
||||||
|
$this->resolver->resolve('http://www.dlsite.com/home/dlaf/=/aid/eai04191/url/https%3A%2F%2Fwww.dlsite.com%2Fhome%2F');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHTMLdescription()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testHTMLdescription.html');
|
||||||
|
|
||||||
|
$this->createResolver(DLsiteResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://www.dlsite.com/books/work/=/product_id/BJ123822.html');
|
||||||
|
$this->assertEquals('獣○彼女カタログ', $metadata->title);
|
||||||
|
$this->assertEquals('著者: チキコ / MUJIN編集部' . PHP_EOL . '【DLsite.com独占販売】 エロ漫画界騒然、1冊まるごと獣○オンリー単行本! 人間チ×ポは出てきませんっ!!', $metadata->description);
|
||||||
|
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/books/BJ124000/BJ123822_img_main.jpg', $metadata->image);
|
||||||
|
$this->assertEquals(['断面図', '中出し', 'フェラチオ', '複数プレイ/乱交', '異種姦', '制服', '水着', 'メイド', '巫女', '軍服', '巨乳/爆乳', '処女', '褐色/日焼け'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://www.dlsite.com/books/work/=/product_id/BJ123822.html', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
36
tests/Unit/MetadataResolver/DeviantArtResolverTest.php
Normal file
36
tests/Unit/MetadataResolver/DeviantArtResolverTest.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
|
use App\MetadataResolver\DeviantArtResolver;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class DeviantArtResolverTest extends TestCase
|
||||||
|
{
|
||||||
|
use CreateMockedResolver;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!$this->shouldUseMock()) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMature()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/DeviantArt/mature.json');
|
||||||
|
|
||||||
|
$this->createResolver(DeviantArtResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://www.deviantart.com/gatanii69/art/R-15-mabel-and-will-update-686016962');
|
||||||
|
$this->assertSame('R-15 mabel and will update', $metadata->title);
|
||||||
|
$this->assertSame('By gatanii69', $metadata->description);
|
||||||
|
$this->assertStringStartsWith('https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/6854f36d-8010-4cd0-9d62-0cf9b7829764/dbcfq2q-d78c9f6e-dced-4e5c-a345-2a1bfd5d7620.jpg', $metadata->image);
|
||||||
|
$this->assertSame(['nsfw', 'reversefalls', 'gravityfalls', 'gravityfallsfanart', 'mabelpines', 'billcipher', 'reversemabel', 'willcipher', 'reversebill', 'reversebillcipher', 'mawill'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://backend.deviantart.com/oembed?url=https://www.deviantart.com/gatanii69/art/R-15-mabel-and-will-update-686016962', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
tests/Unit/MetadataResolver/FantiaResolverTest.php
Normal file
36
tests/Unit/MetadataResolver/FantiaResolverTest.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
|
use App\MetadataResolver\FantiaResolver;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class FantiaResolverTest extends TestCase
|
||||||
|
{
|
||||||
|
use CreateMockedResolver;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!$this->shouldUseMock()) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Fantia/test.json');
|
||||||
|
|
||||||
|
$this->createResolver(FantiaResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://fantia.jp/posts/206561');
|
||||||
|
$this->assertSame('召喚士アルドラ', $metadata->title);
|
||||||
|
$this->assertSame('サークル: サークルぬるま湯 (ナナナナ)' . PHP_EOL . 'コミッション' . PHP_EOL . 'クイーンズブレイドリベリオンの召喚士アルドラです。', $metadata->description);
|
||||||
|
$this->assertSame('https://c.fantia.jp/uploads/post/file/206561/main_dbcc59e5-4090-4650-b969-8855a721c6a5.jpg', $metadata->image);
|
||||||
|
$this->assertSame(['ふたなり', '超乳', '超根', 'クイーンズブレイド', 'ナナナナ'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://fantia.jp/api/v1/posts/206561', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
101
tests/Unit/MetadataResolver/FanzaResolverTest.php
Normal file
101
tests/Unit/MetadataResolver/FanzaResolverTest.php
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
|
use App\MetadataResolver\FanzaResolver;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class FanzaResolverTest extends TestCase
|
||||||
|
{
|
||||||
|
use CreateMockedResolver;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!$this->shouldUseMock()) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provider
|
||||||
|
*/
|
||||||
|
public function test($filename, $url, $title, $description, $image, $tags)
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . "/../../fixture/Fanza/{$filename}");
|
||||||
|
|
||||||
|
$this->createResolver(FanzaResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve($url);
|
||||||
|
$this->assertSame($title, $metadata->title);
|
||||||
|
$this->assertSame($description, $metadata->description);
|
||||||
|
$this->assertSame($image, $metadata->image);
|
||||||
|
$this->assertSame($tags, $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame($url, (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provider()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'動画 digital/videoa' => [
|
||||||
|
'digital_videoa.html',
|
||||||
|
'https://www.dmm.co.jp/digital/videoa/-/detail/=/cid=ssni00558/',
|
||||||
|
'巨乳姉妹2人とただひたすらセックスに明け暮れた両親不在の3日間',
|
||||||
|
'「お姉ちゃんもヤりなよ。すごい気持ちいいよ、セックス」ボクには父親が再婚してできた義理の妹たちがいる。名前はみはるとしおん。ある週末、父と母が外出して家を空けると、僕と妹たちの関係が大きく変わった。姉のみはるの前で妹のしおんと肉体関係を持つとそのままみはるともSEX。そして僕たちは両親がいない3日間、ただただSEXを楽しんだんだ。※ 配信方法によって収録内容が異なる場合があります。',
|
||||||
|
'https://pics.dmm.co.jp/digital/video/ssni00558/ssni00558pl.jpg',
|
||||||
|
['夕美しおん', '羽咲みはる', '朝霧浄', 'エスワン_ナンバーワンスタイル', 'S1_NO.1_STYLE', 'ハイビジョン', '独占配信', '制服', 'ドラマ', '巨乳', '美少女', 'ギリモザ', '姉・妹']
|
||||||
|
],
|
||||||
|
'素人動画 digital/videoc' => [
|
||||||
|
'digital_videoc.html',
|
||||||
|
'https://www.dmm.co.jp/digital/videoc/-/detail/=/cid=sweet015/',
|
||||||
|
'ねる',
|
||||||
|
'鉄板オナ素材的ハイシコリティ!もうサンプルは見ていただけましたか!?そうなんです!非の打ち所まるで無し!恋するキラッキラの瞳!愛嬌抜群の純真笑顔!Gカップ巨乳にむっちむちの恵体!モザイク越しにも伝わってしまう雑誌グラビア級の美少女ルックス!このスペックなのに自分に自信が持てない系のウブっ子!触れただけで濡れだす敏感ボディ!ねっとりDキスから嬉しそうに大量唾液をゴク飲みする程度には恋愛洗脳済み!溢れ出るガマン汁を丁寧に舐めとるラブいフェラ!ビックビク痙攣しながら困り顔で何度も何度も連続イキ絶頂!※ 配信方法によって収録内容が異なる場合があります。' . PHP_EOL . '特集:' . PHP_EOL . PHP_EOL . 'FANZAオリジナル『素人ホイホイZ/素人ホイホイsweet!』',
|
||||||
|
'https://pics.dmm.co.jp/digital/amateur/sweet015/sweet015jp.jpg',
|
||||||
|
['素人ホイホイsweet!', '独占配信', '巨乳', '制服', '清楚', '美少女', '女子校生', 'ハイビジョン']
|
||||||
|
],
|
||||||
|
'アニメ digital/anime' => [
|
||||||
|
'digital_anime.html',
|
||||||
|
'https://www.dmm.co.jp/digital/anime/-/detail/=/cid=h_1379jdxa57513/',
|
||||||
|
'性活週間 THE ANIMATION 第1巻',
|
||||||
|
'めちゃシコ美少女マスター・みちきんぐの初単行本が' . PHP_EOL . '『ヌーディストビーチに修学旅行で?』『リアルエロゲシチュエーション』など' . PHP_EOL . '大ヒットシリーズを手掛けたアダルトアニメ界の新進気鋭クリエイター' . PHP_EOL . '「小原和大」によって待望のOVA化!' . PHP_EOL . '私と姉体験してみない?' . PHP_EOL . '(c)2019 みちきんぐ/GOT/ピンクパイナップル※ 配信方法によって収録内容が異なる場合があります。',
|
||||||
|
'https://pics.dmm.co.jp/digital/video/h_1379jdxa57513/h_1379jdxa57513pl.jpg',
|
||||||
|
['性活週間_THE_ANIMATION', 'ピンクパイナップル', 'Pink_Pineapple', 'ハイビジョン', '中出し', 'フェラ', '巨乳', '姉・妹']
|
||||||
|
],
|
||||||
|
'同人' => [
|
||||||
|
'doujin.html',
|
||||||
|
'https://www.dmm.co.jp/dc/doujin/-/detail/=/cid=d_115139/',
|
||||||
|
'美少女拉致って性教育',
|
||||||
|
'ハ○エースでおさげ髪美少女を拉致って、凌辱する内容です。' . PHP_EOL . '汚っさん×美少女モノ。' . PHP_EOL . '表紙込み総ページ数28p(内本文27p)' . PHP_EOL . '表紙大きさ1200×1719' . PHP_EOL . '本文大きさ1200×1694',
|
||||||
|
'https://doujin-assets.dmm.co.jp/digital/comic/d_115139/d_115139pr.jpg',
|
||||||
|
['美少女拉致って性教育', 'オリジナル', '制服', '男性向け', 'ミニ系', '少女', '屋外', '中出し', '成人向け', 'みくろぺえじ'],
|
||||||
|
],
|
||||||
|
'電子書籍' => [
|
||||||
|
'book.html',
|
||||||
|
'https://book.dmm.co.jp/detail/b104atint00313/',
|
||||||
|
'少女×少女×少女',
|
||||||
|
'少女達が乱舞する…!' . PHP_EOL . '天上家。俺が捨てたあの家…祭子から「母が亡くなった」と電話を受けて、俺は妹達を救うために帰って行くが…。そこで待っていたのは、運命に逆らえず妹達との果てしなき乱交の宴だった…。' . PHP_EOL . '透明感溢れる魅力的なキャラクター、緻密に描きこまれた世界、そしてそのスタイルからは想像できないハードかつ長大なエロ描写!赤月みゅうとのセカンド単行本。',
|
||||||
|
'https://ebook-assets.dmm.co.jp/digital/e-book/b104atint00313/b104atint00313pl.jpg',
|
||||||
|
['赤月みゅうと', 'MUJIN編集部', '少女×少女×少女', 'MUJIN_COMICS', 'ティーアイネット', 'アダルトコミック単行本', '単行本', '美少女', '中出し', '3P・4P', 'ハーレム']
|
||||||
|
],
|
||||||
|
'PCゲーム' => [
|
||||||
|
'dlsoft.html',
|
||||||
|
'https://dlsoft.dmm.co.jp/detail/views_0630/',
|
||||||
|
'姫と穢欲のサクリファイス',
|
||||||
|
'ソリデ国――国家間戦争に勝利し発展した大国は、一人の男によって襲撃される。国王に強い恨みを抱き、復讐のために行動を起こした主人公・カルドは使役している‘‘悪魔’’の力を借りて城を掌握。国政や国民には興味を示さず、国王への復讐として悪魔達の能力を使って王女・フィアナへの調教を開始する。',
|
||||||
|
'https://pics.dmm.co.jp/digital/pcgame/views_0630/views_0630pl.jpg',
|
||||||
|
['B-銀河', '遊丸', '瑠奈璃亜', 'はっとりまさき', '蒼瀬', '木下じゃっく', '御導はるか', '薄迷', '犬童飛沫', '星天誠', '紅ぴえろ', 'エスクード', 'お姫様', '辱め', 'デモ・体験版あり', 'ファンタジー']
|
||||||
|
],
|
||||||
|
'未対応' => [
|
||||||
|
'nosupport.html',
|
||||||
|
'http://www.dmm.co.jp/ppm/video/-/detail/=/cid=h_275tdsu00032/',
|
||||||
|
'素人のお姉さん!!「チ○ポを洗う」お仕事してみませんか? 2',
|
||||||
|
'パーツモデルの募集と思い面接に訪れた素人娘達に、初めての『チ●ポ』を洗うお仕事してもらいました!『エッチとかじゃなくて…洗うだけなら…』自らに言い聞かせる様に出演承諾した彼女...',
|
||||||
|
'http://pics.dmm.co.jp/digital/video/h_275tdsu00032/h_275tdsu00032pl.jpg',
|
||||||
|
[]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
71
tests/Unit/MetadataResolver/IwaraResolverTest.php
Normal file
71
tests/Unit/MetadataResolver/IwaraResolverTest.php
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
|
use App\MetadataResolver\IwaraResolver;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class IwaraResolverTest extends TestCase
|
||||||
|
{
|
||||||
|
use CreateMockedResolver;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!$this->shouldUseMock()) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testVideo()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Iwara/video.html');
|
||||||
|
|
||||||
|
$this->createResolver(IwaraResolver::class, $responseText);
|
||||||
|
|
||||||
|
$url = 'https://ecchi.iwara.tv/videos/wqlwatgmvhqg40kg';
|
||||||
|
$metadata = $this->resolver->resolve($url);
|
||||||
|
$this->assertEquals('Cakeface【鈴谷、プリンツ】', $metadata->title);
|
||||||
|
$this->assertEquals('投稿者: kuro@vov' . PHP_EOL . 'Thank you for watching!いつもありがとうございます' . PHP_EOL . 'こっそり微修正…' . PHP_EOL . 'Model:鈴谷&プリンツ つみだんご様 罪袋:BCD様' . PHP_EOL . '(いずれも改変)クレジット漏れゴメンナサイ。。。' . PHP_EOL, $metadata->description);
|
||||||
|
$this->assertEquals(['KanColle', 'kuro@vov'], $metadata->tags);
|
||||||
|
$this->assertEquals('https://i.iwara.tv/sites/default/files/videos/thumbnails/238591/thumbnail-238591_0004.jpg', $metadata->image);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame($url, (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testYouTube()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Iwara/youtube.html');
|
||||||
|
|
||||||
|
$this->createResolver(IwaraResolver::class, $responseText);
|
||||||
|
|
||||||
|
$url = 'https://iwara.tv/videos/z4dn6fag4iko08o0';
|
||||||
|
$metadata = $this->resolver->resolve($url);
|
||||||
|
$this->assertEquals('むちむち天龍ちゃんで君色に染まる', $metadata->title);
|
||||||
|
$this->assertEquals('投稿者: kochira' . PHP_EOL . 'Ray-cast test. Still trying to figure out how Ray-cast works so I\'m sorry if anything looks off.' . PHP_EOL . 'Unauthorized reproduction prohibited (無断転載は禁止です/未經授權禁止複製)' . PHP_EOL, $metadata->description);
|
||||||
|
$this->assertEquals(['KanColle', 'kochira'], $metadata->tags);
|
||||||
|
$this->assertEquals('https://img.youtube.com/vi/pvA5Db082yo/maxresdefault.jpg', $metadata->image);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame($url, (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testImages()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Iwara/images.html');
|
||||||
|
|
||||||
|
$this->createResolver(IwaraResolver::class, $responseText);
|
||||||
|
|
||||||
|
$url = 'https://iwara.tv/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3';
|
||||||
|
$metadata = $this->resolver->resolve($url);
|
||||||
|
$this->assertEquals('鏡音りん18歳', $metadata->title);
|
||||||
|
$this->assertEquals('投稿者: Tonjiru Lion' . PHP_EOL . '今回はあんまエロくないです。' . PHP_EOL, $metadata->description);
|
||||||
|
$this->assertEquals(['Vocaloid', 'Tonjiru Lion'], $metadata->tags);
|
||||||
|
$this->assertEquals('https://i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_a.png', $metadata->image);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame($url, (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
|
use App\MetadataResolver\Kb10uyShortStoryServerResolver;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class Kb10uyShortStoryServerResolverTest extends TestCase
|
||||||
|
{
|
||||||
|
use CreateMockedResolver;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!$this->shouldUseMock()) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNormalPost()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Kb10uyShortStoryServer/tomone.html');
|
||||||
|
|
||||||
|
$this->createResolver(Kb10uyShortStoryServerResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://ss.kb10uy.org/posts/14');
|
||||||
|
$this->assertSame('朋音「は、はぁ?おむつ?」', $metadata->title);
|
||||||
|
$this->assertSame('自炊したおかずってやつです。とりあえずこのSSの中ではkb10uyの彼女は朋音ってことにしといてください。そうじゃないと出す男が決定できないので。', $metadata->description);
|
||||||
|
$this->assertSame(['妄想', 'kb10uy', '岩永朋音', 'おむつ'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://ss.kb10uy.org/posts/14', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
53
tests/Unit/MetadataResolver/NicoSeigaResolverTest.php
Normal file
53
tests/Unit/MetadataResolver/NicoSeigaResolverTest.php
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
|
use App\MetadataResolver\NicoSeigaResolver;
|
||||||
|
use Tests\MyAsserts;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class NicoSeigaResolverTest extends TestCase
|
||||||
|
{
|
||||||
|
use CreateMockedResolver, MyAsserts;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!$this->shouldUseMock()) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSeiga()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/NicoSeiga/seiga.html');
|
||||||
|
|
||||||
|
$this->createResolver(NicoSeigaResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://seiga.nicovideo.jp/seiga/im9623750');
|
||||||
|
$this->assertSame('シャミ子 / まとけち さんのイラスト', $metadata->title);
|
||||||
|
$this->assertSame('シャミ子が悪いんだよ・・・', $metadata->description);
|
||||||
|
$this->assertSame('https://lohas.nicoseiga.jp/thumb/9623750l?', $metadata->image);
|
||||||
|
$this->assertArrayContains(['アニメ', 'まちカドまぞく', 'シャミ子', 'シャドウミストレス優子', '吉田優子', '危機管理フォーム'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://seiga.nicovideo.jp/seiga/im9623750', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testShunga()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/NicoSeiga/shunga.html');
|
||||||
|
|
||||||
|
$this->createResolver(NicoSeigaResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://seiga.nicovideo.jp/seiga/im9232798');
|
||||||
|
$this->assertSame('ベッドのゆかりさん / せゆーら/Se-U-Ra さんのイラスト', $metadata->title);
|
||||||
|
$this->assertSame('待つ側の方がつよいってスマブラが伝えてきたので', $metadata->description);
|
||||||
|
$this->assertSame('https://lohas.nicoseiga.jp/thumb/9232798l?', $metadata->image);
|
||||||
|
$this->assertArrayContains(['結月ゆかり', 'VOICEROID'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://seiga.nicovideo.jp/seiga/im9232798', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -25,10 +25,10 @@ class NijieResolverTest extends TestCase
|
|||||||
$this->createResolver(NijieResolver::class, $responseText);
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=66384');
|
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=66384');
|
||||||
$this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title);
|
$this->assertSame('チンポップくんの日常ep.1「チンポップくんと釣り」', $metadata->title);
|
||||||
$this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description);
|
$this->assertSame('投稿者: ニジエ運営' . PHP_EOL . 'メールマガジン漫画のバックナンバー第一話です!' . PHP_EOL . '最新話はメールマガジンより配信中です。', $metadata->description);
|
||||||
$this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image);
|
$this->assertSame('https://pic.nijie.net/04/nijie_picture/38_20131130155623.png', $metadata->image);
|
||||||
$this->assertNotRegExp('~/diff/main/~', $metadata->image);
|
$this->assertSame(['ニジエたん', '釣り', 'チンポップ君の日常', '公式漫画'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://nijie.info/view.php?id=66384', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://nijie.info/view.php?id=66384', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -41,10 +41,10 @@ class NijieResolverTest extends TestCase
|
|||||||
$this->createResolver(NijieResolver::class, $responseText);
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=202707');
|
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=202707');
|
||||||
$this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title);
|
$this->assertSame('ニジエ壁紙', $metadata->title);
|
||||||
$this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description);
|
$this->assertSame('投稿者: ニジエ運営' . PHP_EOL . 'ニジエのPCとiphone用(4.7inch推奨)の壁紙です。' . PHP_EOL . '保存してご自由にお使いくださいませ。', $metadata->description);
|
||||||
$this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image);
|
$this->assertSame('https://pic.nijie.net/03/nijie_picture/38_20170209185801_0.png', $metadata->image);
|
||||||
$this->assertNotRegExp('~/diff/main/~', $metadata->image);
|
$this->assertSame(['ニジエたん', '壁紙'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://nijie.info/view.php?id=202707', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://nijie.info/view.php?id=202707', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -57,9 +57,10 @@ class NijieResolverTest extends TestCase
|
|||||||
$this->createResolver(NijieResolver::class, $responseText);
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=9537');
|
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=9537');
|
||||||
$this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title);
|
$this->assertSame('ニジエがgifに対応したんだってね 奥さん', $metadata->title);
|
||||||
$this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description);
|
$this->assertSame('投稿者: 黒末アプコ' . PHP_EOL . 'アニメgifとか専門外なのでよくわかりませんでした', $metadata->description);
|
||||||
$this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image);
|
$this->assertStringStartsWith('https://nijie.info/pic/logo/nijie_logo_og.png', $metadata->image);
|
||||||
|
$this->assertSame(['おっぱい', '陥没乳首', '眼鏡', 'GIFアニメ', 'ぶるんぶるん', 'アニメgif'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://nijie.info/view.php?id=9537', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://nijie.info/view.php?id=9537', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
@@ -72,74 +73,79 @@ class NijieResolverTest extends TestCase
|
|||||||
$this->createResolver(NijieResolver::class, $responseText);
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=256283');
|
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=256283');
|
||||||
$this->assertEquals('てすと | ニジエ運営', $metadata->title);
|
$this->assertSame('てすと', $metadata->title);
|
||||||
$this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description);
|
$this->assertSame('投稿者: ニジエ運営' . PHP_EOL . 'H264動画てすと あとで消します' . PHP_EOL . PHP_EOL . '今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません' . PHP_EOL . '動画は勝手にループします', $metadata->description);
|
||||||
$this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image);
|
$this->assertStringStartsWith('https://nijie.info/pic/logo/nijie_logo_og.png', $metadata->image);
|
||||||
|
$this->assertSame([], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://nijie.info/view.php?id=256283', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://nijie.info/view.php?id=256283', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testStandardPictureSp()
|
public function testViewPopup()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html');
|
||||||
|
|
||||||
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://nijie.info/view_popup.php?id=66384');
|
||||||
|
$this->assertSame('チンポップくんの日常ep.1「チンポップくんと釣り」', $metadata->title);
|
||||||
|
$this->assertSame('投稿者: ニジエ運営' . PHP_EOL . 'メールマガジン漫画のバックナンバー第一話です!' . PHP_EOL . '最新話はメールマガジンより配信中です。', $metadata->description);
|
||||||
|
$this->assertSame('https://pic.nijie.net/04/nijie_picture/38_20131130155623.png', $metadata->image);
|
||||||
|
$this->assertSame(['ニジエたん', '釣り', 'チンポップ君の日常', '公式漫画'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://nijie.info/view.php?id=66384', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSp()
|
||||||
{
|
{
|
||||||
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html');
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html');
|
||||||
|
|
||||||
$this->createResolver(NijieResolver::class, $responseText);
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=66384');
|
$metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=66384');
|
||||||
$this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title);
|
$this->assertSame('チンポップくんの日常ep.1「チンポップくんと釣り」', $metadata->title);
|
||||||
$this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description);
|
$this->assertSame('投稿者: ニジエ運営' . PHP_EOL . 'メールマガジン漫画のバックナンバー第一話です!' . PHP_EOL . '最新話はメールマガジンより配信中です。', $metadata->description);
|
||||||
$this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image);
|
$this->assertSame('https://pic.nijie.net/04/nijie_picture/38_20131130155623.png', $metadata->image);
|
||||||
$this->assertNotRegExp('~/diff/main/~', $metadata->image);
|
$this->assertSame(['ニジエたん', '釣り', 'チンポップ君の日常', '公式漫画'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://nijie.info/view.php?id=66384', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://nijie.info/view.php?id=66384', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testMultiplePictureSp()
|
public function testSpViewPopup()
|
||||||
{
|
{
|
||||||
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureResponse.html');
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html');
|
||||||
|
|
||||||
$this->createResolver(NijieResolver::class, $responseText);
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=202707');
|
$metadata = $this->resolver->resolve('https://sp.nijie.info/view_popup.php?id=66384');
|
||||||
$this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title);
|
$this->assertSame('チンポップくんの日常ep.1「チンポップくんと釣り」', $metadata->title);
|
||||||
$this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description);
|
$this->assertSame('投稿者: ニジエ運営' . PHP_EOL . 'メールマガジン漫画のバックナンバー第一話です!' . PHP_EOL . '最新話はメールマガジンより配信中です。', $metadata->description);
|
||||||
$this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image);
|
$this->assertSame('https://pic.nijie.net/04/nijie_picture/38_20131130155623.png', $metadata->image);
|
||||||
$this->assertNotRegExp('~/diff/main/~', $metadata->image);
|
$this->assertSame(['ニジエたん', '釣り', 'チンポップ君の日常', '公式漫画'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://nijie.info/view.php?id=202707', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://nijie.info/view.php?id=66384', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAnimationGifSp()
|
public function testHasHtmlInAuthorProfile()
|
||||||
{
|
{
|
||||||
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifResponse.html');
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testHasHtmlInAuthorProfileResponse.html');
|
||||||
|
|
||||||
$this->createResolver(NijieResolver::class, $responseText);
|
$this->createResolver(NijieResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=285698');
|
||||||
$metadata = $this->resolver->resolve('https://nijie.info/view.php?id=9537');
|
$this->assertSame('JK文化祭コスプレ喫茶', $metadata->title);
|
||||||
$this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title);
|
$this->assertSame('投稿者: ままままま' . PHP_EOL .
|
||||||
$this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description);
|
'https://www.pixiv.net/fanbox/creator/32045169' . PHP_EOL .
|
||||||
$this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image);
|
'ピクシブのファンボックスでこっちに上げてた一次創作のノリでえっちなやつ描いてます' . PHP_EOL .
|
||||||
|
'二次創作のえっちなやつは相変わらずこっち' . PHP_EOL . '健全目なのはついったー', $metadata->description);
|
||||||
|
$this->assertSame('https://pic.nijie.net/02/nijie_picture/540086_20181028112046_0.png', $metadata->image);
|
||||||
|
$this->assertSame(['バニーガール'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://nijie.info/view.php?id=9537', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://nijie.info/view.php?id=285698', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testMp4MovieSp()
|
|
||||||
{
|
|
||||||
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieResponse.html');
|
|
||||||
|
|
||||||
$this->createResolver(NijieResolver::class, $responseText);
|
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=256283');
|
|
||||||
$this->assertEquals('てすと | ニジエ運営', $metadata->title);
|
|
||||||
$this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description);
|
|
||||||
$this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image);
|
|
||||||
if ($this->shouldUseMock()) {
|
|
||||||
$this->assertSame('https://nijie.info/view.php?id=256283', (string) $this->handler->getLastRequest()->getUri());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
namespace Tests\Unit\MetadataResolver;
|
namespace Tests\Unit\MetadataResolver;
|
||||||
|
|
||||||
use App\MetadataResolver\OGPResolver;
|
use App\MetadataResolver\OGPResolver;
|
||||||
use GuzzleHttp\Exception\ClientException;
|
use GuzzleHttp\Exception\BadResponseException;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
class OGPResolverTest extends TestCase
|
class OGPResolverTest extends TestCase
|
||||||
@@ -14,7 +14,7 @@ class OGPResolverTest extends TestCase
|
|||||||
{
|
{
|
||||||
$this->createResolver(OGPResolver::class, '', [], 404);
|
$this->createResolver(OGPResolver::class, '', [], 404);
|
||||||
|
|
||||||
$this->expectException(\RuntimeException::class);
|
$this->expectException(BadResponseException::class);
|
||||||
$this->resolver->resolve('http://example.com/404');
|
$this->resolver->resolve('http://example.com/404');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -40,13 +40,13 @@ class PixivResolverTest extends TestCase
|
|||||||
|
|
||||||
$this->createResolver(PixivResolver::class, $responseText);
|
$this->createResolver(PixivResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://www.pixiv.net/member_illust.php?mode=medium&illust_id=74939802');
|
$metadata = $this->resolver->resolve('https://www.pixiv.net/member_illust.php?mode=medium&illust_id=75899985');
|
||||||
$this->assertEquals('T-20S', $metadata->title);
|
$this->assertEquals('コミッション絵33', $metadata->title);
|
||||||
$this->assertEquals('投稿者: amssc' . PHP_EOL . 'JUST FOR FUN' . PHP_EOL . '现在可以做到游戏内立绘修改拉!立绘动态皮肤都可以支持,想要资助获得新技术请站内信联系我。', $metadata->description);
|
$this->assertEquals('投稿者: ナゼ(NAZE)' . PHP_EOL . 'Leak' . PHP_EOL . PHP_EOL . 'Character:アリッサさん(依頼主のオリキャラ)', $metadata->description);
|
||||||
$this->assertEquals('https://i.pixiv.cat/img-master/img/2019/05/28/01/16/24/74939802_p0_master1200.jpg', $metadata->image);
|
$this->assertEquals('https://i.pixiv.cat/img-master/img/2019/07/25/13/02/59/75899985_p0_master1200.jpg', $metadata->image);
|
||||||
$this->assertEquals(['巨乳', '母乳', 'lastorigin', 'Last_Origin', 'T-20S', 'おっぱい', '라스트오리진', '노움'], $metadata->tags);
|
$this->assertEquals(['巨乳輪', '超乳', '巨乳首', '母乳'], $metadata->tags);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://www.pixiv.net/ajax/illust/74939802', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.pixiv.net/ajax/illust/75899985', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,4 +65,20 @@ class PixivResolverTest extends TestCase
|
|||||||
$this->assertSame('https://www.pixiv.net/ajax/illust/46713544', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://www.pixiv.net/ajax/illust/46713544', (string) $this->handler->getLastRequest()->getUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testArtworkUrl()
|
||||||
|
{
|
||||||
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/illust.json');
|
||||||
|
|
||||||
|
$this->createResolver(PixivResolver::class, $responseText);
|
||||||
|
|
||||||
|
$metadata = $this->resolver->resolve('https://www.pixiv.net/artworks/68188073');
|
||||||
|
$this->assertEquals('coffee break', $metadata->title);
|
||||||
|
$this->assertEquals('投稿者: 裕' . PHP_EOL, $metadata->description);
|
||||||
|
$this->assertEquals('https://i.pixiv.cat/img-master/img/2018/04/12/00/01/28/68188073_p0_master1200.jpg', $metadata->image);
|
||||||
|
$this->assertEquals(['オリジナル', 'カフェ', '眼鏡', 'イヤホン', 'ぱっつん', '艶ぼくろ', '眼鏡っ娘', 'オリジナル5000users入り'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://www.pixiv.net/ajax/illust/68188073', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/tora/ec/item/040030720152');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/tora/ec/item/040030720152');
|
||||||
$this->assertEquals('新・古明地喫茶~そしてまた扉は開く~', $metadata->title);
|
$this->assertEquals('新・古明地喫茶~そしてまた扉は開く~', $metadata->title);
|
||||||
$this->assertEquals('サークル【ツキギのとこ】(槻木こうすけ)発行の「新・古明地喫茶~そしてまた扉は開く~」を買うなら、とらのあな全年齢向け通信販売!', $metadata->description);
|
$this->assertEquals('サークル【ツキギのとこ】(槻木こうすけ)発行の「新・古明地喫茶~そしてまた扉は開く~」を買うなら、とらのあな全年齢向け通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.shop/tora/ec/item/040030720152', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.shop/tora/ec/item/040030720152', (string) $this->handler->getLastRequest()->getUri());
|
||||||
@@ -41,7 +41,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/tora_r/ec/item/040030720174');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/tora_r/ec/item/040030720174');
|
||||||
$this->assertEquals('お姉ちゃんが妹のぱんつでひとりえっちしてました。', $metadata->title);
|
$this->assertEquals('お姉ちゃんが妹のぱんつでひとりえっちしてました。', $metadata->title);
|
||||||
$this->assertEquals('サークル【没後】(RYO)発行の「お姉ちゃんが妹のぱんつでひとりえっちしてました。」を買うなら、とらのあな成年向け通信販売!', $metadata->description);
|
$this->assertEquals('サークル【没後】(RYO)発行の「お姉ちゃんが妹のぱんつでひとりえっちしてました。」を買うなら、とらのあな成年向け通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.jp/tora_r/ec/item/040030720174', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.jp/tora_r/ec/item/040030720174', (string) $this->handler->getLastRequest()->getUri());
|
||||||
@@ -56,7 +56,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/tora_d/digi/item/042000013358');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/tora_d/digi/item/042000013358');
|
||||||
$this->assertEquals('虎の穴ラボの薄い本。vol 1.5', $metadata->title);
|
$this->assertEquals('虎の穴ラボの薄い本。vol 1.5', $metadata->title);
|
||||||
$this->assertEquals('サークル【虎の穴ラボ】(虎の穴ラボエンジニアチーム)発行の「虎の穴ラボの薄い本。vol 1.5」を買うなら、とらのあな全年齢向け電子書籍!', $metadata->description);
|
$this->assertEquals('サークル【虎の穴ラボ】(虎の穴ラボエンジニアチーム)発行の「虎の穴ラボの薄い本。vol 1.5」を買うなら、とらのあな全年齢向け電子書籍通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.shop/tora_d/digi/item/042000013358', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.shop/tora_d/digi/item/042000013358', (string) $this->handler->getLastRequest()->getUri());
|
||||||
@@ -71,7 +71,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/tora_rd/digi/item/042000013181');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/tora_rd/digi/item/042000013181');
|
||||||
$this->assertEquals('放課後のお花摘み', $metadata->title);
|
$this->assertEquals('放課後のお花摘み', $metadata->title);
|
||||||
$this->assertEquals('サークル【給食泥棒】(村雲)発行の「放課後のお花摘み」を買うなら、とらのあな成年向け電子書籍!', $metadata->description);
|
$this->assertEquals('サークル【給食泥棒】(村雲)発行の「放課後のお花摘み」を買うなら、とらのあな成年向け電子書籍通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.jp/tora_rd/digi/item/042000013181', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.jp/tora_rd/digi/item/042000013181', (string) $this->handler->getLastRequest()->getUri());
|
||||||
@@ -86,7 +86,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/joshi/ec/item/040030702729');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/joshi/ec/item/040030702729');
|
||||||
$this->assertEquals('円卓のクソ漫画', $metadata->title);
|
$this->assertEquals('円卓のクソ漫画', $metadata->title);
|
||||||
$this->assertEquals('サークル【地獄のすなぎもカーニバル】(槌田)発行の「円卓のクソ漫画」を買うなら、とらのあなJOSHIBU全年齢向け通信販売!', $metadata->description);
|
$this->assertEquals('サークル【地獄のすなぎもカーニバル】(槌田)発行の「円卓のクソ漫画」を買うなら、とらのあな女子部全年齢向け通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.shop/joshi/ec/item/040030702729', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.shop/joshi/ec/item/040030702729', (string) $this->handler->getLastRequest()->getUri());
|
||||||
@@ -101,7 +101,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/joshi_r/ec/item/040030730126');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/joshi_r/ec/item/040030730126');
|
||||||
$this->assertEquals('リバースナイトリバース', $metadata->title);
|
$this->assertEquals('リバースナイトリバース', $metadata->title);
|
||||||
$this->assertEquals('サークル【雨傘サイクル】(チャリリズム)発行の「リバースナイトリバース」を買うなら、とらのあなJOSHIBU成年向け通信販売!', $metadata->description);
|
$this->assertEquals('サークル【雨傘サイクル】(チャリリズム)発行の「リバースナイトリバース」を買うなら、とらのあな女子部成年向け通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.jp/joshi_r/ec/item/040030730126', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.jp/joshi_r/ec/item/040030730126', (string) $this->handler->getLastRequest()->getUri());
|
||||||
@@ -116,7 +116,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/joshi_d/digi/item/042000012192');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/joshi_d/digi/item/042000012192');
|
||||||
$this->assertEquals('超幸運ガール審神者GOLDEN', $metadata->title);
|
$this->assertEquals('超幸運ガール審神者GOLDEN', $metadata->title);
|
||||||
$this->assertEquals('サークル【Day Of The Dead】(ほんちゅ)発行の「超幸運ガール審神者GOLDEN」を買うなら、とらのあなJOSHIBU全年齢向け電子書籍!', $metadata->description);
|
$this->assertEquals('サークル【Day Of The Dead】(ほんちゅ)発行の「超幸運ガール審神者GOLDEN」を買うなら、とらのあな女子部全年齢向け電子書籍通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.shop/joshi_d/digi/item/042000012192', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.shop/joshi_d/digi/item/042000012192', (string) $this->handler->getLastRequest()->getUri());
|
||||||
@@ -131,7 +131,7 @@ class ToranoanaResolverTest extends TestCase
|
|||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/joshi_rd/digi/item/042000013472');
|
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/joshi_rd/digi/item/042000013472');
|
||||||
$this->assertEquals('UBWの裏側で非公式に遠坂凛をナデナデする本', $metadata->title);
|
$this->assertEquals('UBWの裏側で非公式に遠坂凛をナデナデする本', $metadata->title);
|
||||||
$this->assertEquals('サークル【阿仁谷組】(阿仁谷ユイジ)発行の「UBWの裏側で非公式に遠坂凛をナデナデする本」を買うなら、とらのあなJOSHIBU成年向け電子書籍!', $metadata->description);
|
$this->assertEquals('サークル【阿仁谷組】(阿仁谷ユイジ)発行の「UBWの裏側で非公式に遠坂凛をナデナデする本」を買うなら、とらのあな女子部成年向け電子書籍通販!', $metadata->description);
|
||||||
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
|
||||||
if ($this->shouldUseMock()) {
|
if ($this->shouldUseMock()) {
|
||||||
$this->assertSame('https://ec.toranoana.jp/joshi_rd/digi/item/042000013472', (string) $this->handler->getLastRequest()->getUri());
|
$this->assertSame('https://ec.toranoana.jp/joshi_rd/digi/item/042000013472', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
@@ -20,15 +20,18 @@ class XtubeResolverTest extends TestCase
|
|||||||
|
|
||||||
public function test()
|
public function test()
|
||||||
{
|
{
|
||||||
$responseText = file_get_contents(__DIR__ . '/../../fixture/Xtube/test.json');
|
$responseText = file_get_contents(__DIR__ . '/../../fixture/Xtube/video.html');
|
||||||
|
|
||||||
$this->createResolver(XtubeResolver::class, $responseText);
|
$this->createResolver(XtubeResolver::class, $responseText);
|
||||||
|
|
||||||
$metadata = $this->resolver->resolve('https://www.xtube.com/video-watch/homegrown-big-tits-18634762');
|
$metadata = $this->resolver->resolve('https://www.xtube.com/video-watch/homegrown-big-tits-18634762');
|
||||||
$this->assertEquals('Homegrown Big Tits', $metadata->title);
|
$this->assertEquals('Homegrown Big Tits', $metadata->title);
|
||||||
$this->assertEquals('Dedicated to the fans of the beautiful amateur women with big natural tits. All user submitted - you can see big boob amateur hotties fucking and sucking as their tits bounce and sway.', $metadata->description);
|
$this->assertEquals('Dedicated to the fans of the beautiful amateur women with big natural tits. All user submitted - you can see big boob amateur hotties fucking and sucking as their tits bounce and sway.', $metadata->description);
|
||||||
$this->assertRegExp('~https://cdn\d-s-hw-e5\.xtube\.com/m=eSK08f/videos/201302/07/RF4Nk-S774-/240X180/1\.jpg~', $metadata->image);
|
$this->assertRegExp('~https://cdn\d+-s-hw-e5\.xtube\.com/m=eaAaaEFb/videos/201302/07/RF4Nk-S774-/original/1\.jpg~', $metadata->image);
|
||||||
$this->assertEquals(['bigtits', 'homeg'], $metadata->tags);
|
$this->assertEquals(['Amateur', 'Blowjob', 'Big Boobs', 'bigtits', 'homeg'], $metadata->tags);
|
||||||
|
if ($this->shouldUseMock()) {
|
||||||
|
$this->assertSame('https://www.xtube.com/video-watch/homegrown-big-tits-18634762', (string) $this->handler->getLastRequest()->getUri());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testNotMatch()
|
public function testNotMatch()
|
||||||
@@ -39,13 +42,4 @@ class XtubeResolverTest extends TestCase
|
|||||||
$this->createResolver(XtubeResolver::class, '');
|
$this->createResolver(XtubeResolver::class, '');
|
||||||
$this->resolver->resolve('https://www.xtube.com/gallery/black-celebs-free-7686657');
|
$this->resolver->resolve('https://www.xtube.com/gallery/black-celebs-free-7686657');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testNotOK()
|
|
||||||
{
|
|
||||||
$this->expectException(\RuntimeException::class);
|
|
||||||
$this->expectExceptionMessage('404: https://www.xtube.com/video-watch/notfound-404');
|
|
||||||
|
|
||||||
$this->createResolver(XtubeResolver::class, '', [], 404);
|
|
||||||
$this->resolver->resolve('https://www.xtube.com/video-watch/notfound-404');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
678
tests/fixture/Cien/test.html
vendored
Normal file
678
tests/fixture/Cien/test.html
vendored
Normal file
File diff suppressed because one or more lines are too long
602
tests/fixture/Cien/testWithNoTimestamp.html
vendored
Normal file
602
tests/fixture/Cien/testWithNoTimestamp.html
vendored
Normal file
@@ -0,0 +1,602 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ja">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<meta name="google-site-verification" content="4UtUmaro4aJIR94PZdv-GoliXlDvtUVFL03-9CTh68s" />
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" id="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, viewport-fit=cover">
|
||||||
|
<meta name="csrf-token" content="1UAeVYZqG3XqR5XwRi0MXYJn3zIf51glrKZKY2gp">
|
||||||
|
<meta name="app-auth-check" content="0">
|
||||||
|
|
||||||
|
<meta property="og:title" content="Ci-en">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="http://ci-en.dlsite.com">
|
||||||
|
<meta property="og:image" content="https://ci-en.dlsite.com/assets/img/common/logo_Ci-en_R18.svg">
|
||||||
|
<meta property="og:site_name" content="Ci-en">
|
||||||
|
<meta property="og:description" content="好きの気持ちは、カタチで伝えよう。">
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:title" content="Ci-en">
|
||||||
|
<meta name="twitter:description" content="好きの気持ちは、カタチで伝えよう。">
|
||||||
|
<meta name="twitter:image:src" content="https://ci-en.dlsite.com/assets/img/common/logo_Ci-en_R18.svg">
|
||||||
|
|
||||||
|
<meta name="description" content="好きの気持ちは、カタチで伝えよう。">
|
||||||
|
<meta name="keyword" content="Ci-en">
|
||||||
|
<meta name="sentry-public-dsn" content="7319f62f11fe408b932254c5fe87eb64@sentry.io/301968">
|
||||||
|
<meta name="sentry-release" content="fd2635a6350eda85e4dbec5559f0172e7f8086df">
|
||||||
|
<meta name="app-locale" content="ja">
|
||||||
|
<title>好きの気持ちは、カタチで伝えよう。 - Ci-en</title>
|
||||||
|
<link media="all" type="text/css" rel="stylesheet" href="https://ci-en.dlsite.com/assets/css/app.css?1567667013">
|
||||||
|
<link rel="icon" href="/favicon.ico">
|
||||||
|
<link rel="stylesheet" href="https://www.dlsite.com/assets/share/css/universal/universal.css">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||||
|
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||||
|
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||||
|
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||||
|
})(window,document,'script','dataLayer','GTM-NNPHW5Z');</script>
|
||||||
|
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-109913020-1"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){
|
||||||
|
dataLayer.push(arguments);
|
||||||
|
}
|
||||||
|
gtag('js', new Date());
|
||||||
|
|
||||||
|
gtag('config', 'UA-109913020-1', {
|
||||||
|
'send_page_view': false,
|
||||||
|
'custom_map': {
|
||||||
|
'dimension1':'logined',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
gtag('set', 'linker', {
|
||||||
|
'accept_incoming': true,
|
||||||
|
'domains': ['ci-en.net','ci-en.dlsite.com']
|
||||||
|
});
|
||||||
|
gtag('event', 'page_view', {
|
||||||
|
'logined': '',
|
||||||
|
'has_creator': '0',
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="global-layout p-topPage ">
|
||||||
|
<!-- グローバルヘッダー -->
|
||||||
|
<div class="l-eisysGroupHeader type-cien">
|
||||||
|
<vue-global-header
|
||||||
|
account-settings-url="https://login.dlsite.com/user/self?redirect_uri=https%3A%2F%2Fci-en.dlsite.com%2Flogout&lang=ja"
|
||||||
|
is-adult="1"
|
||||||
|
user-id=""
|
||||||
|
creator-id=""
|
||||||
|
></vue-global-header>
|
||||||
|
</div>
|
||||||
|
<header class="global-layout-item type-header">
|
||||||
|
<div class="header-inner">
|
||||||
|
|
||||||
|
<div class="cien-logo type-r18">
|
||||||
|
<a href="/">Ci-en</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form method="GET" action="https://ci-en.dlsite.com/search" accept-charset="UTF-8" class="hd-searchBox">
|
||||||
|
<input type="text" class="hd-searchInput" name="keyword" placeholder="クリエイターを検索">
|
||||||
|
<input type="submit" class="hd-searchButton" value="">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="nav-drawer type-menu">
|
||||||
|
<input id="nav-inputMenu" type="checkbox" class="nav-unshown">
|
||||||
|
<label id="nav-open" for="nav-inputMenu">
|
||||||
|
<span></span>
|
||||||
|
</label>
|
||||||
|
<label class="nav-unshown icon-navClose" id="nav-close" for="nav-inputMenu"><span></span></label>
|
||||||
|
<div class="nav-content type-left">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="navEntry">
|
||||||
|
<p class="text">DLsiteアカウントをお持ちの方はログインできます。</p>
|
||||||
|
<div class="btnBox">
|
||||||
|
<a href="https://ci-en.dlsite.com/login" class="btn type-basic">ログイン</a>
|
||||||
|
<a href="https://ci-en.dlsite.com/login" class="btn type-important">新規登録</a>
|
||||||
|
</div>
|
||||||
|
<p class="notice">株式会社エイシスが運営しているサービスをDLsiteアカウント一つでご利用いただけます。</p>
|
||||||
|
</div>
|
||||||
|
<ul class="nav-submenuList">
|
||||||
|
<li class="nav-submenuList-item"><a href="https://ci-en.dlsite.com/about/supporter">Ci-enとは?</a></li>
|
||||||
|
<li class="nav-submenuList-item"><a href="https://ci-en.dlsite.com/about/creator">クリエイター登録</a></li>
|
||||||
|
<li class="nav-submenuList-item"><a href="https://ci-en.dlsite.com/about/faq">よくある質問</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="globalNav-wrap">
|
||||||
|
<ul class="globalNav is-guest">
|
||||||
|
|
||||||
|
<li class="globalNav-item type-bell">
|
||||||
|
|
||||||
|
<a href="https://ci-en.dlsite.com/mypage/activity">
|
||||||
|
<span class="globalNav-icon">通知</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="globalNav-item type-searchBox">
|
||||||
|
<form method="GET" action="https://ci-en.dlsite.com/search" accept-charset="UTF-8" class="hd-search">
|
||||||
|
<input type="submit" class="hd-searchButton" value="">
|
||||||
|
<input type="text" class="hd-searchInput" name="keyword" placeholder="クリエイターを検索">
|
||||||
|
</form>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="globalNav-item type-search ">
|
||||||
|
<a href="https://ci-en.dlsite.com/search/top">
|
||||||
|
<span class="globalNav-icon"></span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="globalNav-item type-signup">
|
||||||
|
<a href="https://ci-en.dlsite.com/login">Ci-enをはじめる</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="globalNav-item type-mypage">
|
||||||
|
<a href="https://ci-en.dlsite.com/mypage">
|
||||||
|
<span class="globalNav-icon">マイページ</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="globalNav-item type-help">
|
||||||
|
<a href="https://ci-en.dlsite.com/about/faq">
|
||||||
|
<span class="globalNav-icon">ヘルプ</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</header>
|
||||||
|
<section class="global-layout-item type-contentsNav">
|
||||||
|
</section>
|
||||||
|
<section id="detail" class="global-layout-item type-contents">
|
||||||
|
<section class="grid-container inner-layout">
|
||||||
|
<div class="topHeroArea" onload="console.log('loaded');">
|
||||||
|
<h1 class="topCatchcopy">
|
||||||
|
<div class="catchcopy-item type-first"></div>
|
||||||
|
<div class="catchcopy-item type-last"></div>
|
||||||
|
</h1>
|
||||||
|
<div id="top-heroarea-mainimg" class="topHeroArea-mainImg">
|
||||||
|
<div class="mainImg-item item-twinkleStar"></div>
|
||||||
|
<div class="mainImg-item item-twinkleStar1"></div>
|
||||||
|
<div class="mainImg-item item-twinkleStar2"></div>
|
||||||
|
<div class="mainImg-item item-star"></div>
|
||||||
|
<div class="topHeroArea-gradeFilter"></div>
|
||||||
|
<div class="mainImg-item item-wood"></div>
|
||||||
|
<div class="mainImg-item item-donguri"></div>
|
||||||
|
<div class="mainImg-item item-present"></div>
|
||||||
|
<div class="mainImg-item item-letter"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid-item grid-main">
|
||||||
|
|
||||||
|
<div class="topIntroArea">
|
||||||
|
<h1 class="topIntroArea-heading"></h1>
|
||||||
|
<div class="topIntroArea-textGroup">
|
||||||
|
<p class="text">新しいものを作るのは、簡単なことではありません。<span>思いを形にするには時間と手間、そして資金が必要です。</span></p>
|
||||||
|
<p class="text">Ci-enで好きなクリエイターを支援すれば、<span>その収益を創作活動に活かすことができるようになります。</span></p>
|
||||||
|
<p class="text">クリエイターも支援者も、誰もが創作を楽しめる世界に参加してみませんか?</p>
|
||||||
|
</div>
|
||||||
|
<div class="topIntroArea-btn">
|
||||||
|
<a href="https://login.dlsite.com/register?redirect_uri=https%3A%2F%2Fci-en.dlsite.com&lang=ja" class="btn type-important-confirm">Ci-enをはじめる</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="topAboutCienArea">
|
||||||
|
<div class="topAboutCienArea-main"></div>
|
||||||
|
<div class="topAboutCienArea-btn">
|
||||||
|
<a href="https://ci-en.dlsite.com/about/supporter" class="btn type-confirm">もっと知りたい方はこちら</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="follow" class="topLetsFollowArea">
|
||||||
|
<div class="topLetsFollowArea-heading"></div>
|
||||||
|
<div class="topLetsFollowArea-body">
|
||||||
|
|
||||||
|
<div class="topShowcase type-popularCreator">
|
||||||
|
<div class="topShowcase-heading">
|
||||||
|
<a href="//ci-en.net#follow" class="btn type-topRatingChange">全年齢に切替</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="topShowcase-body">
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00000208/6742fc1b379a180e4485cdeff9a086d535725683ca882155b400bc65ab13ed3e/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00000208/6f0dac0278bbb547e97b0deddd2aad22043d6b9ce8cde868b99e543d7dc1ec9f/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">ONEONE1</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/208" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00001145/4f39516e4f22c76b45443b5567789419d8d0ea985958cd26adea88cf79c95fd3/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00001145/5c18c657f97e23ea73a700784f55c2e34b1871e532b45e32118ee57a6c2cb677/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">同人サークルGyu!</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/1145" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00000057/a8c0cf4f84fc374e9ba5891ee2a158a69067eee0d3601a66e1e00489df4df25d/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00000057/72fbd8b3e2124f88de11866d21a23c6e4ff375e62dba50c517f537655ff2e981/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">クリメニア</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/57" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00001321/5e327eb84b4ce6a36be637729b000ba74a9b27f35273f08a30b86e464ee1e25e/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00001321/60557adcbb149f7494c6aed36f3d44373896a971b997af3e4e02a650f70f5cbe/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">Hypnotic Yanh</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=8">音声作品</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/1321" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00000391/f0134aaa1e2174efabc30e024c973024f34064e0f6ab6738477564c34170ae3b/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00000391/c98d97cf4d4af1c6aad452150693a06a63e6f4323e21ad0848e83f910a949b80/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">シロクマの嫁(伊ヶ崎綾香)</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=8">音声作品</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/391" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00001058/14ccafc478078692f53a62c0e2ea722d55dd018945d44c31e55bdcc237ee9944/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00001058/3ac1827236a6fce3d5d7d9142dd4e77e3b732b63db18af81e5c74818572d7b10/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">鉱油/73号坑道</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/1058" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00000190/0ebc04b8de8d6e42f6c5bf020936bff79bdfa29ab71f1ea2eff547f42fd9caa7/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00000190/e5e01272dac25575a00b651adf8d04524d91a87ff534bc4391dbabea404e6a49/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">ぽいずん</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/190" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00002004/b568c5bcc1108db1276c32b550140f5d539a92c589f3bd8fc16163fba56eb50a/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00002004/aab5ff3de14c0361715b4a16cc3cc6961cac72b84762d514e6fc38c40dda81e6/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">あいすシチュー</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/2004" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00001191/b0ca242c5095531d78a95f3bc4e15a5b642b33c808f91af1cf95723dee7a4543/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00001191/950a61d5e3648e8c01c31a9a3ee127c8cb8e5e015379feb45d409f61acf9cf5a/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">みこにそみ</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/1191" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
<div class="mod-creatorCard at-topPage">
|
||||||
|
<div class="creatorCard-header">
|
||||||
|
<img src="https://media.ci-en.jp/public/cover/creator/00000944/8b3b9c5cc1024bf0b532b9a0db168db7600a77ed6fbeaf15eb4c56656659666d/image-990-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="creatorCard-body">
|
||||||
|
<dt class="creatorCard-thumb">
|
||||||
|
<div class="accountIcon type-cerator size-m">
|
||||||
|
<img src="https://media.ci-en.jp/public/icon/creator/00000944/9dc7439b9801ac6f0e66e92f8980fb2771cb8ab2f8a05e230c753d0f953ce4e0/image-200-c.jpg" alt="">
|
||||||
|
</div>
|
||||||
|
</dt>
|
||||||
|
<dd class="creatorCard-name">D-LIS-ディーリス</dd>
|
||||||
|
<dd class="creatorCard-tag">
|
||||||
|
<ul class="tagList type-creator">
|
||||||
|
<li class="tagList-item type-creator">
|
||||||
|
<a class="item-tag type-activityGenre" href="/search?categoryId=9">ゲーム</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<a href="https://ci-en.dlsite.com/creator/944" class="creatorCard-link"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="topShowcase type-searchByGenre">
|
||||||
|
<div class="topShowcase-heading"></div>
|
||||||
|
<div class="topShowcase-body">
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=9" class="topGenre-link">
|
||||||
|
ゲーム
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=1" class="topGenre-link">
|
||||||
|
イラスト
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=2" class="topGenre-link">
|
||||||
|
漫画
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=8" class="topGenre-link">
|
||||||
|
音声作品
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=3" class="topGenre-link">
|
||||||
|
小説
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=7" class="topGenre-link">
|
||||||
|
声優・歌い手
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=12" class="topGenre-link">
|
||||||
|
映像・アニメ
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=17" class="topGenre-link">
|
||||||
|
その他
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=10" class="topGenre-link">
|
||||||
|
YouTuber・実況
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="topGenre-item">
|
||||||
|
<a href="/search?categoryId=14" class="topGenre-link">
|
||||||
|
VR
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="topRegisterCreatorArea">
|
||||||
|
<div class="topRegisterCreatorArea-body">
|
||||||
|
<div class="topRegisterCreatorArea-main">
|
||||||
|
|
||||||
|
<div class="topRegisterCreatorArea-mainImg"></div>
|
||||||
|
|
||||||
|
<div class="topRegisterCreatorArea-btn">
|
||||||
|
<a href="https://ci-en.dlsite.com/about/creator" class="btn type-important-confirm">クリエイター登録について</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="topRegisterArea">
|
||||||
|
<div class="topRegisterArea-body">
|
||||||
|
<div class="topRegisterArea-main">
|
||||||
|
<p class="topRegisterArea-text">DLsiteアカウントをお持ちの方はログインできます。</p>
|
||||||
|
<div class="btnBox">
|
||||||
|
<a href="https://ci-en.dlsite.com/login" class="btn type-confirm">ログイン</a>
|
||||||
|
<a href="https://login.dlsite.com/register?redirect_uri=https%3A%2F%2Fci-en.dlsite.com&lang=ja" class="btn type-important-confirm" target="_blank">新規登録</a>
|
||||||
|
</div>
|
||||||
|
<p class="topRegisterArea-annotation">株式会社エイシスが運営しているサービスをDLsiteアカウント一つでご利用いただけます。</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<footer class="global-layout-item type-footer">
|
||||||
|
<div class="gotoTOPContainer">
|
||||||
|
<a href="#" class="ankerlink">ページトップ</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="globalFooter">
|
||||||
|
<div class="footerContainer innerSpaceFooter">
|
||||||
|
<dl class="footerNav itemNum1">
|
||||||
|
<dt class="footerNav-title">Ci-enについて</dt>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/about/supporter" class="footerLink">Ci-enとは?</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/about/creator" class="footerLink">クリエイター登録</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/about/faq" class="footerLink">よくある質問(支援者)</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/about/creator-faq" class="footerLink">よくある質問(クリエイター)</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/inquiry" class="footerLink">お問い合わせ</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="http://info.ci-en.net" target="_blank" class="footerLink">お知らせブログ</a></dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl class="footerNav itemNum2">
|
||||||
|
<dt class="footerNav-title">運営情報</dt>
|
||||||
|
<dd class="footerNav-item"><a href="http://www.eisys.co.jp/company/company-info.html" target="_blank" class="footerLink">会社概要</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/legal/regulation" class="footerLink">利用規約</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/legal/law" class="footerLink">特定商取引法に基づく表示</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/legal/censorship" class="footerLink">コンプライアンスポリシー</a></dd>
|
||||||
|
<dd class="footerNav-item"><a href="https://ci-en.dlsite.com/legal/privacy" class="footerLink">個人情報の取り扱いについて</a></dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<div class="l-eisysGroupFooter type-cien is-sponly">
|
||||||
|
<div class="eisysGroupFooterInner">
|
||||||
|
<p class="eisysGroupFooterHeading">関連サービス</p>
|
||||||
|
<ul class="eisysGroupFooterService">
|
||||||
|
<li class="eisysGroupFooterService-link type-dlsite">
|
||||||
|
<a href="https://www.dlsite.com/maniax-touch/?utm_campaign=cien&utm_medium=text&utm_content=sp_globalfooter"><span>ダウンロードショップ</span>DLsite</a>
|
||||||
|
</li>
|
||||||
|
<li class="eisysGroupFooterService-link type-nijiyome">
|
||||||
|
<a href="https://www.nijiyome.jp/?en=cien&em=text&et=sp_globalfooter"><span>オンラインゲームサイト</span>にじよめ</a>
|
||||||
|
</li>
|
||||||
|
<li class="eisysGroupFooterService-link type-channel">
|
||||||
|
<a href="https://ch.dlsite.com/?from=sp_globalfooter_cien"><span>二次元コミュニティサイト</span>DLチャンネル</a>
|
||||||
|
</li>
|
||||||
|
<li class="eisysGroupFooterService-link type-chobit">
|
||||||
|
<a href="https://chobit.cc/?from=sp_globalfooter_cien"><span>無料体験版サイト</span>chobit</a>
|
||||||
|
</li>
|
||||||
|
<li class="eisysGroupFooterService-link type-triokini">
|
||||||
|
<a href="https://triokini.com/how_to_use?from=sp_globalfooter_cien"><span>即売会取り置きサイト</span>トリオキニ</a>
|
||||||
|
</li>
|
||||||
|
<li class="eisysGroupFooterService-link type-studio">
|
||||||
|
<a href="https://dlsitestudio.com/?from=sp_globalfooter_cien"><span>音声収録スタジオ</span>DLsiteスタジオ</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="snsArea">
|
||||||
|
<p class="heading">SNS公式アカウント</p>
|
||||||
|
<a href="https://twitter.com/cien_info?lang=ja" class="twitter_link" target="_blink" rel="nofollow noopener"></a>
|
||||||
|
</div>
|
||||||
|
<p class="copyright">© 2018 Ci-en</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="https://ci-en.dlsite.com/assets/js/vendor.bundle.js?1568167511"></script>
|
||||||
|
<script src="https://ci-en.dlsite.com/assets/js/app.bundle.js?1568167511"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
1001
tests/fixture/DLsite/testBL.html
vendored
1001
tests/fixture/DLsite/testBL.html
vendored
File diff suppressed because it is too large
Load Diff
792
tests/fixture/DLsite/testBooks.html
vendored
792
tests/fixture/DLsite/testBooks.html
vendored
File diff suppressed because it is too large
Load Diff
730
tests/fixture/DLsite/testComic.html
vendored
730
tests/fixture/DLsite/testComic.html
vendored
File diff suppressed because it is too large
Load Diff
403
tests/fixture/DLsite/testEcchiEng.html
vendored
403
tests/fixture/DLsite/testEcchiEng.html
vendored
@@ -1,8 +1,8 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="viewport" content="width=991">
|
<meta name="viewport" content="width=1024">
|
||||||
<meta http-equiv="Content-Style-Type" content="text/css" />
|
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||||||
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
||||||
<meta name="google-site-verification" content="S2Jzwn_Dm4hGoyTfPnxEUSKnbHSuT73N6SZbTanWbEM" />
|
<meta name="google-site-verification" content="S2Jzwn_Dm4hGoyTfPnxEUSKnbHSuT73N6SZbTanWbEM" />
|
||||||
@@ -42,20 +42,20 @@
|
|||||||
<script>/dlsite_dozen=/.test(document.cookie) || (document.cookie = 'dlsite_dozen=' + Math.floor(Math.random() * 12) + '; path=/; max-age=63072000')</script>
|
<script>/dlsite_dozen=/.test(document.cookie) || (document.cookie = 'dlsite_dozen=' + Math.floor(Math.random() * 12) + '; path=/; max-age=63072000')</script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/reset.css?1459221919" type="text/css" id="reset" />
|
<link rel="stylesheet" href="/css/reset.css?1459221919" type="text/css" id="reset" />
|
||||||
<link rel="stylesheet" href="/css/default_eng.css?1559631936" type="text/css" id="default" />
|
<link rel="stylesheet" href="/css/default_eng.css?1566881566" type="text/css" id="default" />
|
||||||
<link rel="stylesheet" href="/css/layout_2col_work_eng.css?1552988739" type="text/css" id="layout_2col_work" />
|
<link rel="stylesheet" href="/css/layout_2col_work_eng.css?1552988739" type="text/css" id="layout_2col_work" />
|
||||||
<link rel="stylesheet" href="/css/common_eng.css?1559631936" type="text/css" id="common" />
|
<link rel="stylesheet" href="/css/common_eng.css?1567473359" type="text/css" id="common" />
|
||||||
<link rel="stylesheet" href="/css/switch_eng.css?1551748184" type="text/css" id="switch" />
|
<link rel="stylesheet" href="/css/switch_eng.css?1560415705" type="text/css" id="switch" />
|
||||||
<link rel="stylesheet" href="/css/suggest.css?1559631936" type="text/css" id="suggest" />
|
<link rel="stylesheet" href="/css/suggest.css?1565749496" type="text/css" id="suggest" />
|
||||||
<link rel="stylesheet" href="/css/header_campaign_banner.css?1559723711" type="text/css" id="header_campaign_banner" />
|
<link rel="stylesheet" href="/css/header_campaign_banner.css?1567745943" type="text/css" id="header_campaign_banner" />
|
||||||
<link rel="stylesheet" href="/assets/share/css/universal/universal.css?" type="text/css" id="universal" />
|
<link rel="stylesheet" href="/assets/share/css/universal/universal.css?" type="text/css" id="universal" />
|
||||||
<link rel="stylesheet" href="/css/work_template_eng.css?1559631936" type="text/css" id="work_template" />
|
<link rel="stylesheet" href="/css/work_template_eng.css?1566876049" type="text/css" id="work_template" />
|
||||||
<link rel="stylesheet" href="/css/work_slider.css?1559631936" type="text/css" id="work_slider" />
|
<link rel="stylesheet" href="/css/work_slider.css?1559631936" type="text/css" id="work_slider" />
|
||||||
|
|
||||||
<script type="text/javascript" src="/js/libs/libraries-pack.js?1502345903"></script>
|
<script type="text/javascript" src="/js/libs/libraries-pack.js?1502345903"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_util.js?1557910552"></script>
|
<script type="text/javascript" src="/js/dlsite_util.js?1561689497"></script>
|
||||||
<script type="text/javascript" src="/js/slide_menu.js?1511946236"></script>
|
<script type="text/javascript" src="/js/slide_menu.js?1511946236"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_suggest.js?1550024738"></script>
|
<script type="text/javascript" src="/js/dlsite_suggest.js?1565749496"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_trigger.js?1544681008"></script>
|
<script type="text/javascript" src="/js/dlsite_trigger.js?1544681008"></script>
|
||||||
<script type="text/javascript" src="/js/jquery.slideproduct.js?1524728551"></script>
|
<script type="text/javascript" src="/js/jquery.slideproduct.js?1524728551"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_img_filter.js?1544681008"></script>
|
<script type="text/javascript" src="/js/dlsite_img_filter.js?1544681008"></script>
|
||||||
@@ -91,7 +91,7 @@ $.extend({
|
|||||||
if ($.useAdultcheck) return;
|
if ($.useAdultcheck) return;
|
||||||
$.useAdultcheck = true;
|
$.useAdultcheck = true;
|
||||||
var s = document.createElement('script');
|
var s = document.createElement('script');
|
||||||
s.src = '/js/adultcheck.js?1553837147';
|
s.src = '/js/adultcheck.js?1566881566';
|
||||||
s.defer = true;
|
s.defer = true;
|
||||||
document.querySelector('head').appendChild(s);
|
document.querySelector('head').appendChild(s);
|
||||||
}
|
}
|
||||||
@@ -131,7 +131,7 @@ if ((dlsite.isAdult() && dlsite.getId() !== 'circle' && !(dlsite.isFemale() && d
|
|||||||
</div>
|
</div>
|
||||||
<ul class="eisysGroupHeaderLinkNav">
|
<ul class="eisysGroupHeaderLinkNav">
|
||||||
<li>
|
<li>
|
||||||
<a href="https://login.dlsite.com/user/self?lang=en&redirect_uri=https://www.dlsite.com/ecchi-eng/" target="_blank">Account Management</a>
|
<a rel="noopener" href="https://login.dlsite.com/user/self?lang=en&redirect_uri=https://www.dlsite.com/ecchi-eng/" target="_blank">Account Management</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="logout" href="https://ssl.dlsite.com/ecchi-eng/logout">Log out</a>
|
<a class="logout" href="https://ssl.dlsite.com/ecchi-eng/logout">Log out</a>
|
||||||
@@ -214,20 +214,23 @@ if ((dlsite.isAdult() && dlsite.getId() !== 'circle' && !(dlsite.isFemale() && d
|
|||||||
<a :href="hasUnboughtFavorites ? 'https://www.dlsite.com/ecchi-eng/mypage/wishlist' : 'https://www.dlsite.com/ecchi-eng/mypage/wishlist'"><i>Favorites</i></a><template v-if="hasUnboughtFavorites" v-cloak><a href="https://www.dlsite.com/ecchi-eng/mypage/wishlist/=/discount/1" class="notificationBadge" >On SALE</a></template>
|
<a :href="hasUnboughtFavorites ? 'https://www.dlsite.com/ecchi-eng/mypage/wishlist' : 'https://www.dlsite.com/ecchi-eng/mypage/wishlist'"><i>Favorites</i></a><template v-if="hasUnboughtFavorites" v-cloak><a href="https://www.dlsite.com/ecchi-eng/mypage/wishlist/=/discount/1" class="notificationBadge" >On SALE</a></template>
|
||||||
</li>
|
</li>
|
||||||
<li class="globalNav-item type-cart"><a href="https://www.dlsite.com/ecchi-eng/cart"><i>Cart</i></a><span v-if="cartActives.length" v-cloak class="cartBadge" v-text="Math.min(cartActives.length, 100)"></span></li>
|
<li class="globalNav-item type-cart"><a href="https://www.dlsite.com/ecchi-eng/cart"><i>Cart</i></a><span v-if="cartActives.length" v-cloak class="cartBadge" v-text="Math.min(cartActives.length, 100)"></span></li>
|
||||||
<li class="globalNav-item type-play"><a href="https://play.dlsite.com/eng/" target="_blank"><i>My Items</i></a></li>
|
<li class="globalNav-item type-play"><a rel="noopener" href="https://play.dlsite.com/eng/" target="_blank"><i>My Items</i></a></li>
|
||||||
<li class="globalNav-item type-mypage"><a href="https://ssl.dlsite.com/ecchi-eng/mypage"><i>My Page</i></a></li>
|
<li class="globalNav-item type-mypage"><a href="https://ssl.dlsite.com/ecchi-eng/mypage"><i>My Page</i></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<!-- /アイコンメニュー -->
|
<!-- /アイコンメニュー -->
|
||||||
<!-- ガイドメニュー -->
|
<!-- ガイドメニュー -->
|
||||||
<div class="globalGuide"><a href="#" class="globalGuide-btn" @click.stop.prevent="toggleMenu()"><i>Help</i></a>
|
<div class="header_guide hover_menu">
|
||||||
<div class="globalGuideLink" :class="{ 'is-active': isActive }">
|
<a href="javascript:void(0)" class="header_guide_btn"><i>Help</i></a>
|
||||||
<ul class="globalGuideLink-item">
|
<div class="dropdown_list">
|
||||||
<li class="link"><a href="https://www.dlsite.com/ecchi-eng/faq/=/type/user" target="_blank"><i>Help / FAQ</i></a></li>
|
<div class="dropdown_list_inner">
|
||||||
<li class="link"><a href="https://www.dlsite.com/ecchi-eng/welcome"><i>New to DLsite?</i></a></li>
|
<ul class="menu_list">
|
||||||
<li class="link"><a href="https://www.dlsite.com/ecchi-eng/circle/invite"><i>Submit Your Works</i></a></li>
|
<li class="menu_list_item"><a rel="noopener" href="https://www.dlsite.com/ecchi-eng/faq/=/type/user" target="_blank"><i>Help / FAQ</i></a></li>
|
||||||
<li class="link"><a href="https://www.dlsite.com/ecchi-eng/guide/payment"><i>About Payment Method</i></a></li>
|
<li class="menu_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome"><i>New to DLsite?</i></a></li>
|
||||||
<li class="link"><a href="https://www.dlsite.com/ecchi-eng/mypage/aboutpoint"><i>About Points</i></a></li>
|
<li class="menu_list_item"><a href="https://www.dlsite.com/ecchi-eng/circle/invite"><i>Submit Your Works</i></a></li>
|
||||||
</ul>
|
<li class="menu_list_item"><a href="https://www.dlsite.com/ecchi-eng/guide/payment"><i>About Payment Method</i></a></li>
|
||||||
|
<li class="menu_list_item"><a href="https://www.dlsite.com/ecchi-eng/mypage/aboutpoint"><i>About Points</i></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /ガイドメニュー -->
|
<!-- /ガイドメニュー -->
|
||||||
@@ -260,18 +263,22 @@ if ((dlsite.isAdult() && dlsite.getId() !== 'circle' && !(dlsite.isFemale() && d
|
|||||||
|
|
||||||
<div class="floorNavLink"><div class="floorNavLink-item type-general"><a href="https://www.dlsite.com/eng/">Hide R18 Products</a></div></div>
|
<div class="floorNavLink"><div class="floorNavLink-item type-general"><a href="https://www.dlsite.com/eng/">Hide R18 Products</a></div></div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="headerNav">
|
<div class="floorSubNav">
|
||||||
<li class="headerNav-item">
|
<div class="floorSubNav-item">
|
||||||
<a v-if="isRankingFilterCondition" v-cloak href="https://www.dlsite.com/ecchi-eng/ranking/week?date=30d">Ranking</a>
|
<ul class="headerNav">
|
||||||
<a v-else href="https://www.dlsite.com/ecchi-eng/ranking/week">Ranking</a>
|
<li class="headerNav-item">
|
||||||
</li>
|
<a v-if="isRankingFilterCondition" v-cloak href="https://www.dlsite.com/ecchi-eng/ranking/week?date=30d">Ranking</a>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/translation">English Version</a></li>
|
<a v-else href="https://www.dlsite.com/ecchi-eng/ranking/week">Ranking</a>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/campaign/241">Discount</a></li>
|
</li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/new">Releases</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/translation">English Version</a></li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/announce/list/day">Upcoming</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/campaign/241">Discount</a></li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/circle/list">Circle</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/new">Releases</a></li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/fs">Advanced Search</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/announce/list/day">Upcoming</a></li>
|
||||||
</ul>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/circle/list">Circle</a></li>
|
||||||
|
<li class="headerNav-item"><a href="https://www.dlsite.com/ecchi-eng/fs">Advanced Search</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -295,7 +302,21 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
|
|
||||||
<!--data-vue-component="header-banner"-->
|
<!--data-vue-component="header-banner"-->
|
||||||
<div data-vue-component="header-banner" data-vue-async="true" data-section_name="campaign_header_banner">
|
<div data-vue-component="header-banner" data-vue-async="true" data-section_name="campaign_header_banner">
|
||||||
<div v-if="loading"></div>
|
<div v-if="loading" class="hd_cp_banner type_1bn">
|
||||||
|
<ul class="cp_bn_list">
|
||||||
|
<li class="cp_bn_item type_15">
|
||||||
|
<a href="https://www.dlsite.com/ecchi-eng/campaign/sale201907">
|
||||||
|
<div class="cp_bn_inner">
|
||||||
|
<div class="cp_bn_reminder">
|
||||||
|
<div class="cp_bn_reminder_content"><i class="cp_bn_reminder_period type_date">~ SEP 17,</i><i class="cp_bn_reminder_period type_time">14:00</i></div>
|
||||||
|
</div>
|
||||||
|
<div class="cp_bn"><img src="/images/campaign/doujin_sale_1907/bn_hd_cp_01_eng.png"></div>
|
||||||
|
<div class="cp_bn_work blank"></div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div v-else-if="is_show_frame" :class="style" class="hd_cp_banner" v-cloak>
|
<div v-else-if="is_show_frame" :class="style" class="hd_cp_banner" v-cloak>
|
||||||
<ul class="cp_bn_list">
|
<ul class="cp_bn_list">
|
||||||
@@ -371,17 +392,17 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
<!-- main_inner -->
|
<!-- main_inner -->
|
||||||
<div id="main_inner">
|
<div id="main_inner">
|
||||||
<div id="work_header" data-section_name="work_header">
|
<div id="work_header" data-section_name="work_header">
|
||||||
<div id="work_left" data-vue-component="product-evaluate" data-product-id="RE144678">
|
<div id="work_left">
|
||||||
<table cellspacing="0" id="work_value">
|
<table cellspacing="0" id="work_value" data-vue-component="product-evaluate" data-product-id="RE144678">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_rankin">
|
<td class="work_rankin">
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr>
|
<tr>
|
||||||
<td v-if="product.ranks.total" v-cloak class="crown_total" :title="'Total ranking (' + product.ranks.total.rank_date + ') / ' + product.ranks.total.rank"> </td>
|
<td v-if="product.ranks.total" v-cloak class="crown_total" :title="$t('product.evaluate.ranking_total' , [ product.ranks.total.rank_date, product.ranks.total.rank ])"> </td>
|
||||||
<td v-if="product.ranks.year" v-cloak class="crown_year" :title="'Year ' + product.ranks.year.rank_date + ' ranking / ' + product.ranks.year.rank"> </td>
|
<td v-if="product.ranks.year" v-cloak class="crown_year" :title="$t('product.evaluate.ranking_year' , [ product.ranks.year.rank_date , product.ranks.year.rank ])"> </td>
|
||||||
<td v-if="product.ranks.month" v-cloak class="crown_month" :title="'Monthly chart (' + product.ranks.month.rank_date + ') / ' + product.ranks.month.rank"> </td>
|
<td v-if="product.ranks.month" v-cloak class="crown_month" :title="$t('product.evaluate.ranking_monthly', [ product.ranks.month.rank_date, product.ranks.month.rank ])"> </td>
|
||||||
<td v-if="product.ranks.week" v-cloak class="crown_week" :title="'Weekly chart (' + product.ranks.week.rank_date + ') / ' + product.ranks.week.rank"> </td>
|
<td v-if="product.ranks.week" v-cloak class="crown_week" :title="$t('product.evaluate.ranking_weekly' , [ product.ranks.week.rank_date , product.ranks.week.rank ])"> </td>
|
||||||
<td v-if="product.ranks.day" v-cloak class="crown_hour" :title="'Daily chart (' + product.ranks.day.rank_date + ') / ' + product.ranks.day.rank"> </td>
|
<td v-if="product.ranks.day" v-cloak class="crown_hour" :title="$t('product.evaluate.ranking_daily' , [ product.ranks.day.rank_date , product.ranks.day.rank ])"> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
@@ -460,18 +481,26 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td v-if="product.review_count" v-cloak class="work_review"><a class="_review_count" href="#review_link"><div title="レビューあり">({{ product.review_count }})</div></a></td>
|
<td v-if="product.review_count" v-cloak class="work_review">
|
||||||
<td class="work_dl" v-if="product.dl_count !== undefined && product.dl_count > 0" v-cloak><div>Purchased: <span class="_dl_count">{{ product.dl_count }}</span> times</div></td>
|
<a class="_review_count" href="#review_link"><div :title="$t('product.evaluate.with_review')" v-text="product.review_count"></div></a>
|
||||||
<td class="work_dl" v-if="product.wishlist_count !== undefined && product.wishlist_count > 0" v-cloak><div>Favorited: <span>{{ product.wishlist_count }}</span></div></td>
|
</td>
|
||||||
|
<!-- 販売 / DL数 -->
|
||||||
|
<td class="work_dl" v-if="product.dl_count !== undefined && product.dl_count > 0" v-cloak>
|
||||||
|
<div v-html="$t('product.evaluate.purchase_count', [ product.dl_count ])"></div>
|
||||||
|
</td>
|
||||||
|
<!-- お気に入り数 -->
|
||||||
|
<td class="work_dl" v-if="product.wishlist_count !== undefined && product.wishlist_count > 0" v-cloak>
|
||||||
|
<div v-html="$t('product.evaluate.favorite_count', [ product.wishlist_count ])"></div>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating">
|
<div itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating">
|
||||||
<meta itemprop="ratingValue" content="4.84" />
|
<meta itemprop="ratingValue" content="4.84" />
|
||||||
<meta itemprop="ratingCount" content="515" />
|
<meta itemprop="ratingCount" content="517" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<product-slider product_id="RE144678" inline-template>
|
<div data-vue-component="product-slider" data-product-id="RE144678">
|
||||||
|
|
||||||
<div class="product-slider">
|
<div class="product-slider">
|
||||||
<!-- Sample image data -->
|
<!-- Sample image data -->
|
||||||
@@ -525,9 +554,10 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</div>
|
</div>
|
||||||
<div v-cloak class="work_slider_comp" v-if="items.length > 1">
|
<div v-cloak class="work_slider_comp" v-if="items.length > 1">
|
||||||
|
|
||||||
<a href="https://www.dlsite.com/ecchi-eng/popup/=/file/smp1/product_id/RE144678.html" target="_blank">Display in HTML format</a>
|
<a rel="noopener" href="https://www.dlsite.com/ecchi-eng/popup/=/file/smp1/product_id/RE144678.html" target="_blank">Display in HTML format</a>
|
||||||
|
|
||||||
<span>{{ __('totalImages', {count: items.length}) }}</span>
|
<!-- 枚数 -->
|
||||||
|
<span v-t="{ path: 'product.slider.totalImages', args: [items.length] }"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Popup viewer -->
|
<!-- Popup viewer -->
|
||||||
@@ -537,7 +567,7 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
<div class="slider_popup_rightpane">
|
<div class="slider_popup_rightpane">
|
||||||
<div class="slider_popup_sidebar">
|
<div class="slider_popup_sidebar">
|
||||||
<template v-for="(item, index) in items">
|
<template v-for="(item, index) in items">
|
||||||
<div target="_blank" :class="{active:(index === swiper.realIndex)}" @click="slideTo(index, false)">
|
<div rel="noopener" target="_blank" :class="{active:(index === swiper.realIndex)}" @click="slideTo(index, false)">
|
||||||
|
|
||||||
<img :src="item.thumb.src" alt="NEKOPARA vol.1 [NEKO WORKs]">
|
<img :src="item.thumb.src" alt="NEKOPARA vol.1 [NEKO WORKs]">
|
||||||
|
|
||||||
@@ -562,15 +592,15 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</div>
|
</div>
|
||||||
<div class="slider_popup_tool">
|
<div class="slider_popup_tool">
|
||||||
<input id="target1" class="checkbox" name="target" type="checkbox" value="1" v-model="alwaysActualSize" @change="toggleActualSize" @click="toggleActualSize">
|
<input id="target1" class="checkbox" name="target" type="checkbox" value="1" v-model="alwaysActualSize" @change="toggleActualSize" @click="toggleActualSize">
|
||||||
<label for="target1" class="checkbox-label">{{ __('alwaysActual') }}</label>
|
<label for="target1" class="checkbox-label" v-t="'product.slider.alwaysActual'"></label>
|
||||||
<span class="slider_popup_description">{{ __('tools') }}</span>
|
<span class="slider_popup_description" v-t="'product.slider.tools'"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</product-slider>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -610,7 +640,7 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Work Format</th>
|
<th>Work Format</th>
|
||||||
<td>
|
<td>
|
||||||
<div class="work_genre"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/work_type/ADV/from/icon.work"><span class="icon_ADV" title="Adventure">Adventure</span></a></div>
|
<div class="work_genre"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/work_type/ADV/from/icon.work"><span class="icon_ADV" title="Adventure">Adventure</span></a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/options/SND/from/icon.work"><span class="icon_SND" title="Inc. Voice">Inc. Voice</span></a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/options/MS2/from/icon.work"><span class="icon_MS2" title="Inc. Music">Inc. Music</span></a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/options/MV2/from/icon.work"><span class="icon_MV2" title="Inc. Anime">Inc. Anime</span></a></div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -630,17 +660,12 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
|
||||||
<th>Option</th>
|
|
||||||
<td>
|
|
||||||
<div class="work_genre"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/options/SND/from/icon.work"><span class="icon_SND" title="Inc. Voice">Inc. Voice</span></a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/options/MS2/from/icon.work"><span class="icon_MS2" title="Inc. Music">Inc. Music</span></a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/options/MV2/from/icon.work"><span class="icon_MV2" title="Inc. Anime">Inc. Anime</span></a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/work_category%5B0%5D/doujin/options/TRI/from/icon.work"><span class="icon_TRI" title="Trial">Trial</span></a></div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
<tr><th>Event</th><td><span class="icon_EVT" title="Comic Market 87"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/ana_flg/all/options/C87/from/icon.work">Comic Market 87</a></span></td></tr>
|
<tr><th>Event</th><td><span class="icon_EVT" title="Comic Market 87"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/ana_flg/all/options/C87/from/icon.work">Comic Market 87</a></span></td></tr>
|
||||||
|
|
||||||
<tr><th>Genre</th><td><div class="main_genre"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/051/from/work.genre">Moe</a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/288/from/work.genre">Master and Servant</a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/455/from/work.genre">Funny Love Story</a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/175/from/work.genre">Nekomimi (Cat Ears)</a></div></td></tr>
|
<tr><th>Genre</th><td><div class="main_genre"><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/051/from/work.genre">Moe</a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/455/from/work.genre">Love Comedy/Romcom</a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/288/from/work.genre">Master and Servant</a><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/175/from/work.genre">Nekomimi (Cat Ears)</a>
|
||||||
|
</div></td></tr>
|
||||||
|
|
||||||
<tr><th>File Size</th><td><div class="main_genre">1.87GB</div></td></tr>
|
<tr><th>File Size</th><td><div class="main_genre">1.87GB</div></td></tr>
|
||||||
|
|
||||||
@@ -658,7 +683,7 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
<li>
|
<li>
|
||||||
<div id="work_win_only">
|
<div id="work_win_only">
|
||||||
<strong>Necessary Settings</strong>
|
<strong>Necessary Settings</strong>
|
||||||
<span>The application may not function unless a <span style="color:#f00">Japanese language pack</span> is set properly in your PC / the <span style="color:#f00">System Locale</span> is set to Japanese. For more details, please refer to [ <a href="https://www.dlsite.com/ecchi-eng/faq/detail/=/type/user/mid/7/did/296" target="_blank">How can I set my system locale to Japanese?</a> ] on the Frequently Asked Questions page.</span>
|
<span>The application may not function unless a <span style="color:#f00">Japanese language pack</span> is set properly in your PC / the <span style="color:#f00">System Locale</span> is set to Japanese. For more details, please refer to [ <a rel="noopener" href="https://www.dlsite.com/ecchi-eng/faq/detail/=/type/user/mid/7/did/296" target="_blank">How can I set my system locale to Japanese?</a> ] on the Frequently Asked Questions page.</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@@ -1052,34 +1077,32 @@ jQuery(function($){
|
|||||||
|
|
||||||
<div class="work_article" id="work_review" data-section_name="work_review">
|
<div class="work_article" id="work_review" data-section_name="work_review">
|
||||||
|
|
||||||
<!-- review_head -->
|
<table class="reviewer_most_genre" cellspacing="0">
|
||||||
<div class="review_head clearfix">
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<p>Frequent keywords the reviewers selected :</p>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/112/from/work.review_genre">Vanilla Sex(10)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/123/from/work.review_genre">Consensual Sex(5)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/128/from/work.review_genre">Internal Cumshot(4)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/138/from/work.review_genre">Blowjob(4)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/078/from/work.review_genre">Maid(3)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/176/from/work.review_genre">Animal Ears(3)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/175/from/work.review_genre">Nekomimi (Cat Ears)(3)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/004/from/work.review_genre">Romance(3)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/206/from/work.review_genre">Girl(3)</a></span>
|
||||||
|
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/013/from/work.review_genre">Heartwarming(3)</a></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="review_head">
|
||||||
<p class="float_l review_count"><span class="fs20">18</span> user reviews</p>
|
<p class="float_l review_count"><span class="fs20">18</span> user reviews</p>
|
||||||
<div class="review_total_box">
|
<template data-vue-component="product-review-order" data-layout="pc" data-product_id="RE144678"></template>
|
||||||
<table class="reviewer_most_genre" cellspacing="0">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
<p>Frequent keywords the reviewers selected :</p>
|
|
||||||
</th>
|
|
||||||
<td>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/112/from/work.review_genre">Vanilla Sex(10)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/123/from/work.review_genre">Consensual Sex(5)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/128/from/work.review_genre">Internal Cumshot(4)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/138/from/work.review_genre">Blowjob(4)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/078/from/work.review_genre">Maid(3)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/176/from/work.review_genre">Animal Ears(3)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/175/from/work.review_genre">Nekomimi (Cat Ears)(3)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/004/from/work.review_genre">Romance(3)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/206/from/work.review_genre">Girl(3)</a></span>
|
|
||||||
<span><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/013/from/work.review_genre">Heartwarming(3)</a></span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- /review_head -->
|
|
||||||
|
|
||||||
<!-- work_review_list -->
|
<!-- work_review_list -->
|
||||||
<table id="work_review_list" cellspacing="0">
|
<table id="work_review_list" cellspacing="0">
|
||||||
@@ -1111,7 +1134,7 @@ jQuery(function($){
|
|||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/123/from/review.genre">Consensual Sex</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/123/from/review.genre">Consensual Sex</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/489/from/review.genre">Cum Swallow</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/489/from/review.genre">Cum Swallow</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/488/from/review.genre">Oral Cumshot</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/488/from/review.genre">Oral Cumshot</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/462/from/review.genre">Straight</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/462/from/review.genre">Heterosexual/Nonke</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/463/from/review.genre">Bisexual</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/463/from/review.genre">Bisexual</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -1213,10 +1236,14 @@ If you know Sayori and or like cat girls, pick this game up, Even if you don
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="review_title">
|
<td class="review_title">
|
||||||
<div class="review_title_l">
|
<div class="review_title_l">
|
||||||
<div class="title">Totally Loved It</div>
|
<div class="title">Quite a lengthy VN, full of rich color and cute characters.</div>
|
||||||
<p>
|
<p>
|
||||||
Jan/09/2018 By <a href="https://www.dlsite.com/ecchi-eng/reviewlist/=/reviewer/REN0002754">jlgddb</a> <span class="purchased">Verified Buyer</span>
|
Jan/16/2015 By <a href="https://www.dlsite.com/ecchi-eng/reviewlist/=/reviewer/REN0001473">Luck</a> <span class="popularity_reviewer bronze">Top Reviewer: Top400</span>
|
||||||
|
<span class="purchased">Verified Buyer</span>
|
||||||
</p>
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="review_title_r">
|
||||||
|
<span class="reviewer_recommend">Loved it!</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -1225,20 +1252,22 @@ If you know Sayori and or like cat girls, pick this game up, Even if you don
|
|||||||
<div class="reviewer_genre">
|
<div class="reviewer_genre">
|
||||||
<p>Keywords the reviewer selected :</p>
|
<p>Keywords the reviewer selected :</p>
|
||||||
<ul class="reviewer_select_genre">
|
<ul class="reviewer_select_genre">
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/058/from/review.genre">Totally Happy</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/152/from/review.genre">Tease</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/138/from/review.genre">Blowjob</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/112/from/review.genre">Vanilla Sex</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/140/from/review.genre">Sexual Training</a></li>
|
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/116/from/review.genre">Orgy Sex</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/123/from/review.genre">Consensual Sex</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/fsr/=/genre/488/from/review.genre">Oral Cumshot</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="_SW2" >
|
<div class="_SW2" >
|
||||||
<p class="reviewer_descrip">I totally enjoyed Nekopara Volume 1. So much so that I purchased the other two volumes as well. The visual novel has a very good set of tools that give you a lot of control over how it displays and works - bounciness, text display speed, text display time, etc., that add a lot to the story. The graphics and artwork are outstanding, and the story line is charming and entertaining. What makes this an outstanding work, though, are the voice actors. Each one brings her character to life through their energy and emotion. Even the "G" rated versions available on Steam, without the X-rated scenes, are very good. But you won't want to miss those, so either purchase the full X-rated versions on DL Site, or the Steam add-on packs to get the full versions. Of course, if you purchase on Steam you get the trading cards, if you're into that sort of thing.</p>
|
<p class="reviewer_descrip">This is probably one of the most high quality neko-themed VN ever released. Though there really isn't much depth to Nekopara's story, the game makes it up with the most adorable cat duo ever made.<br />
|
||||||
|
<br />
|
||||||
|
The story follows the MC just opening his own bakery shop. Before opening, he stumbled upon two heavy boxes, and in them were Vanilla and Chocola, his sister's two catgirls.<br />
|
||||||
|
<br />
|
||||||
|
Without going into too much depth, the story is pretty much a slice-of-life kind of thing. Oh, and the H-scene? Yeah, they're animated.</p>
|
||||||
<p class="review_ref">
|
<p class="review_ref">
|
||||||
<input value="Helpful" type="button" class="_btn_good_review btn_default" data-review_id="14366" data-product_id="RE144678">
|
<input value="Helpful" type="button" class="_btn_good_review btn_default" data-review_id="8979" data-product_id="RE144678">
|
||||||
<span class="useful">1 users found this helpful.</span> <span class="review_report">[ <a href="https://ssl.dlsite.com/ecchi-eng/contact/review/=/reviewer_id/REN0002754/product_id/RE144678.html">Report Abuse</a> ]</span>
|
<span class="useful">5 users found this helpful.</span> <span class="review_report">[ <a href="https://ssl.dlsite.com/ecchi-eng/contact/review/=/reviewer_id/REN0001473/product_id/RE144678.html">Report Abuse</a> ]</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="mini_message _review_message" style="display: none;"> </p>
|
<p class="mini_message _review_message" style="display: none;"> </p>
|
||||||
</div>
|
</div>
|
||||||
@@ -1251,7 +1280,7 @@ If you know Sayori and or like cat girls, pick this game up, Even if you don
|
|||||||
<div class="review_title_l">
|
<div class="review_title_l">
|
||||||
<div class="title">An amazing game</div>
|
<div class="title">An amazing game</div>
|
||||||
<p>
|
<p>
|
||||||
Dec/10/2017 By <a href="https://www.dlsite.com/ecchi-eng/reviewlist/=/reviewer/REN0001802">KTEZ</a> <span class="popularity_reviewer gold">Top Reviewer: 9th</span>
|
Dec/10/2017 By <a href="https://www.dlsite.com/ecchi-eng/reviewlist/=/reviewer/REN0001802">KTEZ</a> <span class="popularity_reviewer gold">Top Reviewer: 10th</span>
|
||||||
<span class="purchased">Verified Buyer</span>
|
<span class="purchased">Verified Buyer</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -1410,7 +1439,7 @@ jQuery(function($){
|
|||||||
<div v-if="product.is_discount || product.is_pointup || rentaled" class="campaign_info">
|
<div v-if="product.is_discount || product.is_pointup || rentaled" class="campaign_info">
|
||||||
<p v-if="rentaled" class="type_rental"><span>レンタル期間中割引<span class="limit">あと{{ rentaled.limit }}</span><span class="period">{{ rentaled.period }}まで</span></span></p>
|
<p v-if="rentaled" class="type_rental"><span>レンタル期間中割引<span class="limit">あと{{ rentaled.limit }}</span><span class="period">{{ rentaled.period }}まで</span></span></p>
|
||||||
<p v-if="product.is_discount" class="type_sale">
|
<p v-if="product.is_discount" class="type_sale">
|
||||||
<a v-if="product.discount_to" :href="product.discount_to" :title="product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF'" target="_blank"><span>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span></a>
|
<a rel="noopener" v-if="product.discount_to" :href="product.discount_to" :title="product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF'" target="_blank"><span>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span></a>
|
||||||
<span v-else>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span>
|
<span v-else>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -1476,7 +1505,7 @@ jQuery(function($){
|
|||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<template v-if="is_bought">
|
<template v-if="is_bought">
|
||||||
<p class="work_stream"><a href="https://play.dlsite.com/eng/?workno=RE144678" class="btn_st" :class="{ disabled: ! product.dlsiteplay_work || product.dl_format == 16 }" title="Open in DLsite Play" target="_blank">Open in DLsite Play</a></p>
|
<p class="work_stream"><a rel="noopener" href="https://play.dlsite.com/eng/?workno=RE144678" class="btn_st" :class="{ disabled: ! product.dlsiteplay_work || product.dl_format == 16 }" title="Open in DLsite Play" target="_blank">Open in DLsite Play</a></p>
|
||||||
<p class="work_cart"><a :href="product.down_url" class="btn_dl" :class="{ disabled: product.dl_format == 17 }">Download</a></p>
|
<p class="work_cart"><a :href="product.down_url" class="btn_dl" :class="{ disabled: product.dl_format == 17 }">Download</a></p>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="is_already">
|
<template v-else-if="is_already">
|
||||||
@@ -1532,7 +1561,7 @@ jQuery(function($){
|
|||||||
<div class="work_buy_body">
|
<div class="work_buy_body">
|
||||||
<div class="work_buy_label">Price</div>
|
<div class="work_buy_label">Price</div>
|
||||||
<div class="work_buy_content">
|
<div class="work_buy_content">
|
||||||
<span class="price">$19.90 / €17.66<i class="work_estimation">(estimation)</i><i class="work_jpy">2,160 JPY</i></span>
|
<span class="price">$20.18 / €18.32<i class="work_estimation">(estimation)</i><i class="work_jpy">2,160 JPY</i></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1624,7 +1653,7 @@ jQuery(function($){
|
|||||||
<p v-if="product.is_rental" class="guide_message">レンタルでは購入特典は<br>付与されません。</p>
|
<p v-if="product.is_rental" class="guide_message">レンタルでは購入特典は<br>付与されません。</p>
|
||||||
|
|
||||||
<ul class="guide_list">
|
<ul class="guide_list">
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/faq/detail/=/type/user/mid/5/did/297" target="_blank">About Purchase Bonus</a></li>
|
<li><a rel="noopener" href="https://www.dlsite.com/ecchi-eng/faq/detail/=/type/user/mid/5/did/297" target="_blank">About Purchase Bonus</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1666,8 +1695,8 @@ jQuery(function($){
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td v-if="user.os == 'Mac'" v-cloak>-</td>
|
<td v-if="user.os == 'Mac'" v-cloak></td>
|
||||||
<td v-else>WindowsVista / Windows7 / Windows8</td>
|
<td v-else>Vista / 7 / 8</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -1683,7 +1712,7 @@ jQuery(function($){
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Windows</td>
|
<td>Windows</td>
|
||||||
<td>WindowsVista / Windows7 / Windows8</td>
|
<td>Vista / 7 / 8</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Mac</td>
|
<td>Mac</td>
|
||||||
@@ -1731,31 +1760,31 @@ jQuery(function($){
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205281.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ206000/RJ205281_img_sam_mini.jpg" alt="Nekopara vol.2 R18 DLC for Steam [NEKO WORKs]" title="Nekopara vol.2 R18 DLC for Steam [NEKO WORKs]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205281.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ206000/RJ205281_img_sam_mini.jpg" alt="Nekopara vol.2 R18 DLC for Steam [NEKO WORKs]" title="Nekopara vol.2 R18 DLC for Steam [NEKO WORKs]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205281.html">Nekopara vol.2 R18 DLC for Steam</a></span>
|
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205281.html">Nekopara vol.2 R18 DLC for Steam</a></span>
|
||||||
<span class="work_price">$8.95</span>
|
<span class="work_price">$9.08</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205284.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ206000/RJ205284_img_sam_mini.jpg" alt="Nekopara vol.1 R18 DLC for Steam [NEKO WORKs]" title="Nekopara vol.1 R18 DLC for Steam [NEKO WORKs]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205284.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ206000/RJ205284_img_sam_mini.jpg" alt="Nekopara vol.1 R18 DLC for Steam [NEKO WORKs]" title="Nekopara vol.1 R18 DLC for Steam [NEKO WORKs]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205284.html">Nekopara vol.1 R18 DLC for Steam</a></span>
|
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE205284.html">Nekopara vol.1 R18 DLC for Steam</a></span>
|
||||||
<span class="work_price">$8.95</span>
|
<span class="work_price">$9.08</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200500.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ201000/RJ200500_img_sam_mini.jpg" alt="NEKOPARA Vol.3 Aromatiser des filles-chats [NEKO WORKs]" title="NEKOPARA Vol.3 Aromatiser des filles-chats [NEKO WORKs]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200500.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ201000/RJ200500_img_sam_mini.jpg" alt="NEKOPARA Vol.3 Aromatiser des filles-chats [NEKO WORKs]" title="NEKOPARA Vol.3 Aromatiser des filles-chats [NEKO WORKs]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200500.html">NEKOPARA Vol.3 Aromatiser des filles-chats</a></span>
|
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200500.html">NEKOPARA Vol.3 Aromatiser des filles-chats</a></span>
|
||||||
<span class="work_price">$19.90</span>
|
<span class="work_price">$20.18</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200911.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ201000/RJ200911_img_sam_mini.jpg" alt="Nekopara vol.3 R18 DLC for Steam [NEKO WORKs]" title="Nekopara vol.3 R18 DLC for Steam [NEKO WORKs]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200911.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ201000/RJ200911_img_sam_mini.jpg" alt="Nekopara vol.3 R18 DLC for Steam [NEKO WORKs]" title="Nekopara vol.3 R18 DLC for Steam [NEKO WORKs]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200911.html">Nekopara vol.3 R18 DLC for Steam</a></span>
|
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE200911.html">Nekopara vol.3 R18 DLC for Steam</a></span>
|
||||||
<span class="work_price">$8.95</span>
|
<span class="work_price">$9.08</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE170327.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ171000/RJ170327_img_sam_mini.jpg" alt="NEKOPARA vol.2 Des soeurs filles-chat tres gentilles [NEKO WORKs]" title="NEKOPARA vol.2 Des soeurs filles-chat tres gentilles [NEKO WORKs]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE170327.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ171000/RJ170327_img_sam_mini.jpg" alt="NEKOPARA vol.2 Des soeurs filles-chat tres gentilles [NEKO WORKs]" title="NEKOPARA vol.2 Des soeurs filles-chat tres gentilles [NEKO WORKs]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE170327.html">NEKOPARA vol.2 Des soeurs filles-chat tres gentilles</a></span>
|
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/ecchi-eng/work/=/product_id/RE170327.html">NEKOPARA vol.2 Des soeurs filles-chat tres gentilles</a></span>
|
||||||
<span class="work_price">$19.90</span>
|
<span class="work_price">$20.18</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -1812,97 +1841,103 @@ jQuery(function($){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- footer -->
|
<!-- footer -->
|
||||||
<div id="footer" data-section_name="footer">
|
<div id="footer" data-section_name="footer">
|
||||||
|
|
||||||
<div class="pagetop_block clearfix">
|
<div class="pagetop_block clearfix">
|
||||||
<p class="pagetop"><a href="#header">Back to Top</a></p>
|
<p class="pagetop"><a href="#header">Back to Top</a></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer_link_01">
|
<div class="footer_floor_nav">
|
||||||
<ul>
|
<ul class="floor_list">
|
||||||
<li><a href="https://www.dlsite.com/">DLsite Home Page</a></li>
|
<li class="floor_list_item"><a href="https://www.dlsite.com/">DLsite Home Page</a></li>
|
||||||
<li><a href="https://www.dlsite.com/eng/">Doujin</a></li>
|
<li class="floor_list_item"><a href="https://www.dlsite.com/eng/">Doujin</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/">Adult Doujin</a></li>
|
<li class="floor_list_item"><a href="https://www.dlsite.com/ecchi-eng/">Adult Doujin</a></li>
|
||||||
<li class="sp_switch"><a id="_touch_link" href="https://www.dlsite.com/ecchi-eng-touch/work/=/product_id/RE144678.html" data-platform="touch">DLsite Mobile Site</a></li>
|
<li class="floor_list_item sp_switch"><a id="_touch_link" href="https://www.dlsite.com/ecchi-eng-touch/work/=/product_id/RE144678.html" data-platform="touch">For Smartphone</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer_section">
|
<div class="footer_section">
|
||||||
<div class="section_container clearfix">
|
<div class="footer_section_inner">
|
||||||
<ul class="link_list">
|
<div class="link_list_wrap">
|
||||||
<li class="list_item">
|
<div class="link_list_box col_2">
|
||||||
<div class="label">About DLsite</div>
|
<div class="label">About DLsite</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.eisys.co.jp/company/company-overview.html" target="_blank">About our Company</a></dd>
|
<li class="link_list_item"><a rel="noopener" href="https://www.eisys.co.jp/company/company-overview.html" target="_blank">About our Company</a></li>
|
||||||
<dd><a href="https://eisys.talentcld.com/" target="_blank">Career Information</a></dd>
|
<li class="link_list_item"><a rel="noopener" href="https://eisys.talentcld.com/" target="_blank">Career Information</a></li>
|
||||||
<dd><a href="https://twitter.com/DLsiteEnglish" target="_blank" class="twitter">Twitter</a> / <a href="https://www.facebook.com/DLsite-English-159690760755693/" target="_blank" class="facebook">Facebook</a> / <a href="http://dlsite-english.tumblr.com/" target="_blank" class="tumblr">Tumblr</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/user/regulations">User Agreement</a></li>
|
||||||
</dl>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/guide/law">Legal Statement (ASCT)</a></li>
|
||||||
</li>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/guide/settlement">Legal Statement (PSA)</a></li>
|
||||||
<li class="list_item">
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/guide/privacy">Privacy Policy</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/mosaic">Compliance Policy</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/guide/copy">Copyright</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/banners">Link to DLsite</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/sitemap">Site Map</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="link_list_box">
|
||||||
<div class="label">Payment / Points</div>
|
<div class="label">Payment / Points</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/guide/payment">Payment Methods</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/guide/payment">Payment Methods</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/mypage/aboutpoint">About Points</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/mypage/aboutpoint">About Points</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/mypage/aboutpoint#gp3">How to Buy Points</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/mypage/aboutpoint#gp3">How to Buy Points</a></li>
|
||||||
</dl>
|
</ul>
|
||||||
</li>
|
</div>
|
||||||
<li class="list_item">
|
<div class="link_list_box">
|
||||||
<div class="label">Help / Guide</div>
|
<div class="label">Help / Guide</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/welcome">New to DLsite?</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome">New to DLsite?</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/faq/=/type/user" target="_blank">Frequently Asked Questions</a></dd>
|
<li class="link_list_item"><a rel="noopener" href="https://www.dlsite.com/ecchi-eng/faq/=/type/user" target="_blank">Frequently Asked Questions</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/opinion/contribution">Product Request / Feedback</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/opinion/contribution">Product Request / Feedback</a></li>
|
||||||
<dd><a href="https://ssl.dlsite.com/ecchi-eng/mypage/setting/mail">Newsletter</a></dd>
|
</ul>
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/sitemap">Site Map</a></dd>
|
</div>
|
||||||
</dl>
|
<div class="link_list_box">
|
||||||
</li>
|
|
||||||
<li class="list_item">
|
|
||||||
<div class="label">DLsite Services</div>
|
<div class="label">DLsite Services</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/circle/invite">Submit Your Works</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/circle/invite">Submit Your Works</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/ecchi-eng/guide/affiliate">Affiliate Program</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/guide/affiliate">Affiliate Program</a></li>
|
||||||
</dl>
|
<li class="link_list_item"><a href="https://ssl.dlsite.com/ecchi-eng/mypage/setting/mail">Newsletter</a></li>
|
||||||
</li>
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer_section_inner sns">
|
||||||
|
<div class="label">Official SNS Accounts</div>
|
||||||
|
<ul class="footer_sns">
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://twitter.com/DLsiteEnglish" target="_blank" class="twitter">Twitter</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://www.facebook.com/DLsite-English-159690760755693/" target="_blank" class="facebook">Facebook</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="http://dlsite-english.tumblr.com/" target="_blank" class="tumblr">Tumblr</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://www.instagram.com/dlsite_english/" target="_blank" class="instagram">Instagram</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://www.youtube.com/channel/UCGKtTGBPGmB5d9jg-fIZc8w" target="_blank" class="youtube">Youtube</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://discordapp.com/channels/555918616793710592/" target="_blank" class="discord">Discord</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section_container type_multilingual clearfix">
|
<div class="footer_section_inner multilingual">
|
||||||
<ul class="link_list">
|
<div class="link_list_wrap">
|
||||||
<li class="list_item">
|
<div class="link_list_box">
|
||||||
|
<div class="label">International</div>
|
||||||
|
<ul class="link_list type_horizontal">
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/maniax/">日本語</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/">English</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com.tw/maniax/">繁體中文</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="link_list_box">
|
||||||
<div class="label">Global Guide</div>
|
<div class="label">Global Guide</div>
|
||||||
<dl>
|
<ul class="link_list type_horizontal">
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome">English</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome">English</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/deu">Deutsch</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/deu">Deutsch</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/fra">Français</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/fra">Français</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/ita">Italiano</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/ita">Italiano</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/esp">Español</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/esp">Español</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/chi">繁體中文</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/ecchi-eng/welcome/chi">繁體中文</a></li>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</div>
|
||||||
</ul>
|
|
||||||
<div class="language_container">
|
|
||||||
<div class="label">Language</div>
|
|
||||||
<select name="language" id="language_select" onchange="location.href=value;">
|
|
||||||
<option value="https://www.dlsite.com/maniax/" >日本語</option>
|
|
||||||
<option value="https://www.dlsite.com/ecchi-eng/" selected>English</option>
|
|
||||||
<option value="https://www.dlsite.com.tw/maniax/">繁體中文</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="copyright">
|
<div id="copyright">
|
||||||
<div class="container clearfix">
|
<div class="container clearfix">
|
||||||
<div id="system">Recommended browsers: The latest version of Internet Explorer, Microsoft Edge, Safari, Chrome or Firefox with JavaScript/cookies enabled.</div>
|
<div id="system">Recommended browsers: The latest version of Internet Explorer, Microsoft Edge, Safari, Chrome or Firefox with JavaScript/cookies enabled.</div>
|
||||||
<ul id="footer_nav">
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/user/regulations">User Agreement</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/guide/law">Legal Statement (ASCT)</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/guide/settlement">Legal Statement (PSA)</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/guide/privacy">Privacy Policy</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/mosaic">Compliance Policy</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/guide/copy">Copyright</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/banners">Link to DLsite</a></li>
|
|
||||||
</ul>
|
|
||||||
<p>© 1996 DLsite</p>
|
<p>© 1996 DLsite</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1927,8 +1962,8 @@ jQuery(function($){
|
|||||||
|
|
||||||
<div data-vue-component="cookie-policy" data-async="true"></div>
|
<div data-vue-component="cookie-policy" data-async="true"></div>
|
||||||
|
|
||||||
<script type="text/javascript" src="/vue/js/pc/vendor.js?cdn_cache=1&v=0.1.2&_=1536029038"></script>
|
<script type="text/javascript" src="/vue/js/pc/vendor.js?cdn_cache=1&v=0.1.2&_=1561425273"></script>
|
||||||
<script type="text/javascript" src="/vue/js/pc/app.js?cdn_cache=1&v=0.1.2&_=1559289223"></script>
|
<script type="text/javascript" src="/vue/js/pc/app.js?cdn_cache=1&v=0.1.2&_=1567559800"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@@ -1971,6 +2006,6 @@ div.measure_tag {
|
|||||||
|
|
||||||
|
|
||||||
<!-- /script_footer -->
|
<!-- /script_footer -->
|
||||||
<script type="text/javascript">var contents = {"impression":[],"detail":[{"id":"RE144678","name":"NEKOPARA vol.1","category":"ecchieng","brand":"RG23422","price":2000,"regist_date":"2014\/12\/30","image_main":"\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ145000\/RJ144678_img_main.jpg","restore_price":null}],"time":0.00010609626770019531};</script>
|
<script type="text/javascript">var contents = {"impression":[],"detail":[{"id":"RE144678","name":"NEKOPARA vol.1","category":"ecchieng","brand":"RG23422","price":2000,"regist_date":"2014\/12\/30","image_main":"\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ145000\/RJ144678_img_main.jpg","restore_price":null}],"time":0.00011491775512695312};</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
344
tests/fixture/DLsite/testEng.html
vendored
344
tests/fixture/DLsite/testEng.html
vendored
@@ -1,8 +1,8 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="viewport" content="width=991">
|
<meta name="viewport" content="width=1024">
|
||||||
<meta http-equiv="Content-Style-Type" content="text/css" />
|
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||||||
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
||||||
<meta name="google-site-verification" content="S2Jzwn_Dm4hGoyTfPnxEUSKnbHSuT73N6SZbTanWbEM" />
|
<meta name="google-site-verification" content="S2Jzwn_Dm4hGoyTfPnxEUSKnbHSuT73N6SZbTanWbEM" />
|
||||||
@@ -42,20 +42,20 @@
|
|||||||
<script>/dlsite_dozen=/.test(document.cookie) || (document.cookie = 'dlsite_dozen=' + Math.floor(Math.random() * 12) + '; path=/; max-age=63072000')</script>
|
<script>/dlsite_dozen=/.test(document.cookie) || (document.cookie = 'dlsite_dozen=' + Math.floor(Math.random() * 12) + '; path=/; max-age=63072000')</script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/reset.css?1459221919" type="text/css" id="reset" />
|
<link rel="stylesheet" href="/css/reset.css?1459221919" type="text/css" id="reset" />
|
||||||
<link rel="stylesheet" href="/css/default_eng.css?1559631936" type="text/css" id="default" />
|
<link rel="stylesheet" href="/css/default_eng.css?1566881566" type="text/css" id="default" />
|
||||||
<link rel="stylesheet" href="/css/layout_2col_work_eng.css?1552988739" type="text/css" id="layout_2col_work" />
|
<link rel="stylesheet" href="/css/layout_2col_work_eng.css?1552988739" type="text/css" id="layout_2col_work" />
|
||||||
<link rel="stylesheet" href="/css/common_eng.css?1559631936" type="text/css" id="common" />
|
<link rel="stylesheet" href="/css/common_eng.css?1567473359" type="text/css" id="common" />
|
||||||
<link rel="stylesheet" href="/css/switch_eng.css?1551748184" type="text/css" id="switch" />
|
<link rel="stylesheet" href="/css/switch_eng.css?1560415705" type="text/css" id="switch" />
|
||||||
<link rel="stylesheet" href="/css/suggest.css?1559631936" type="text/css" id="suggest" />
|
<link rel="stylesheet" href="/css/suggest.css?1565749496" type="text/css" id="suggest" />
|
||||||
<link rel="stylesheet" href="/css/header_campaign_banner.css?1559723711" type="text/css" id="header_campaign_banner" />
|
<link rel="stylesheet" href="/css/header_campaign_banner.css?1567745943" type="text/css" id="header_campaign_banner" />
|
||||||
<link rel="stylesheet" href="/assets/share/css/universal/universal.css?" type="text/css" id="universal" />
|
<link rel="stylesheet" href="/assets/share/css/universal/universal.css?" type="text/css" id="universal" />
|
||||||
<link rel="stylesheet" href="/css/work_template_eng.css?1559631936" type="text/css" id="work_template" />
|
<link rel="stylesheet" href="/css/work_template_eng.css?1566876049" type="text/css" id="work_template" />
|
||||||
<link rel="stylesheet" href="/css/work_slider.css?1559631936" type="text/css" id="work_slider" />
|
<link rel="stylesheet" href="/css/work_slider.css?1559631936" type="text/css" id="work_slider" />
|
||||||
|
|
||||||
<script type="text/javascript" src="/js/libs/libraries-pack.js?1502345903"></script>
|
<script type="text/javascript" src="/js/libs/libraries-pack.js?1502345903"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_util.js?1557910552"></script>
|
<script type="text/javascript" src="/js/dlsite_util.js?1561689497"></script>
|
||||||
<script type="text/javascript" src="/js/slide_menu.js?1511946236"></script>
|
<script type="text/javascript" src="/js/slide_menu.js?1511946236"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_suggest.js?1550024738"></script>
|
<script type="text/javascript" src="/js/dlsite_suggest.js?1565749496"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_trigger.js?1544681008"></script>
|
<script type="text/javascript" src="/js/dlsite_trigger.js?1544681008"></script>
|
||||||
<script type="text/javascript" src="/js/jquery.slideproduct.js?1524728551"></script>
|
<script type="text/javascript" src="/js/jquery.slideproduct.js?1524728551"></script>
|
||||||
<script type="text/javascript" src="/js/dlsite_img_filter.js?1544681008"></script>
|
<script type="text/javascript" src="/js/dlsite_img_filter.js?1544681008"></script>
|
||||||
@@ -90,7 +90,7 @@ $.extend({
|
|||||||
if ($.useAdultcheck) return;
|
if ($.useAdultcheck) return;
|
||||||
$.useAdultcheck = true;
|
$.useAdultcheck = true;
|
||||||
var s = document.createElement('script');
|
var s = document.createElement('script');
|
||||||
s.src = '/js/adultcheck.js?1553837147';
|
s.src = '/js/adultcheck.js?1566881566';
|
||||||
s.defer = true;
|
s.defer = true;
|
||||||
document.querySelector('head').appendChild(s);
|
document.querySelector('head').appendChild(s);
|
||||||
}
|
}
|
||||||
@@ -130,7 +130,7 @@ if ((dlsite.isAdult() && dlsite.getId() !== 'circle' && !(dlsite.isFemale() && d
|
|||||||
</div>
|
</div>
|
||||||
<ul class="eisysGroupHeaderLinkNav">
|
<ul class="eisysGroupHeaderLinkNav">
|
||||||
<li>
|
<li>
|
||||||
<a href="https://login.dlsite.com/user/self?lang=en&redirect_uri=https://www.dlsite.com/eng/" target="_blank">Account Management</a>
|
<a rel="noopener" href="https://login.dlsite.com/user/self?lang=en&redirect_uri=https://www.dlsite.com/eng/" target="_blank">Account Management</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="logout" href="https://ssl.dlsite.com/eng/logout">Log out</a>
|
<a class="logout" href="https://ssl.dlsite.com/eng/logout">Log out</a>
|
||||||
@@ -213,20 +213,23 @@ if ((dlsite.isAdult() && dlsite.getId() !== 'circle' && !(dlsite.isFemale() && d
|
|||||||
<a :href="hasUnboughtFavorites ? 'https://www.dlsite.com/eng/mypage/wishlist' : 'https://www.dlsite.com/eng/mypage/wishlist'"><i>Favorites</i></a><template v-if="hasUnboughtFavorites" v-cloak><a href="https://www.dlsite.com/eng/mypage/wishlist/=/discount/1" class="notificationBadge" >On SALE</a></template>
|
<a :href="hasUnboughtFavorites ? 'https://www.dlsite.com/eng/mypage/wishlist' : 'https://www.dlsite.com/eng/mypage/wishlist'"><i>Favorites</i></a><template v-if="hasUnboughtFavorites" v-cloak><a href="https://www.dlsite.com/eng/mypage/wishlist/=/discount/1" class="notificationBadge" >On SALE</a></template>
|
||||||
</li>
|
</li>
|
||||||
<li class="globalNav-item type-cart"><a href="https://www.dlsite.com/eng/cart"><i>Cart</i></a><span v-if="cartActives.length" v-cloak class="cartBadge" v-text="Math.min(cartActives.length, 100)"></span></li>
|
<li class="globalNav-item type-cart"><a href="https://www.dlsite.com/eng/cart"><i>Cart</i></a><span v-if="cartActives.length" v-cloak class="cartBadge" v-text="Math.min(cartActives.length, 100)"></span></li>
|
||||||
<li class="globalNav-item type-play"><a href="https://play.dlsite.com/eng/" target="_blank"><i>My Items</i></a></li>
|
<li class="globalNav-item type-play"><a rel="noopener" href="https://play.dlsite.com/eng/" target="_blank"><i>My Items</i></a></li>
|
||||||
<li class="globalNav-item type-mypage"><a href="https://ssl.dlsite.com/eng/mypage"><i>My Page</i></a></li>
|
<li class="globalNav-item type-mypage"><a href="https://ssl.dlsite.com/eng/mypage"><i>My Page</i></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<!-- /アイコンメニュー -->
|
<!-- /アイコンメニュー -->
|
||||||
<!-- ガイドメニュー -->
|
<!-- ガイドメニュー -->
|
||||||
<div class="globalGuide"><a href="#" class="globalGuide-btn" @click.stop.prevent="toggleMenu()"><i>Help</i></a>
|
<div class="header_guide hover_menu">
|
||||||
<div class="globalGuideLink" :class="{ 'is-active': isActive }">
|
<a href="javascript:void(0)" class="header_guide_btn"><i>Help</i></a>
|
||||||
<ul class="globalGuideLink-item">
|
<div class="dropdown_list">
|
||||||
<li class="link"><a href="https://www.dlsite.com/eng/faq/=/type/user" target="_blank"><i>Help / FAQ</i></a></li>
|
<div class="dropdown_list_inner">
|
||||||
<li class="link"><a href="https://www.dlsite.com/eng/welcome"><i>New to DLsite?</i></a></li>
|
<ul class="menu_list">
|
||||||
<li class="link"><a href="https://www.dlsite.com/eng/circle/invite"><i>Submit Your Works</i></a></li>
|
<li class="menu_list_item"><a rel="noopener" href="https://www.dlsite.com/eng/faq/=/type/user" target="_blank"><i>Help / FAQ</i></a></li>
|
||||||
<li class="link"><a href="https://www.dlsite.com/eng/guide/payment"><i>About Payment Method</i></a></li>
|
<li class="menu_list_item"><a href="https://www.dlsite.com/eng/welcome"><i>New to DLsite?</i></a></li>
|
||||||
<li class="link"><a href="https://www.dlsite.com/eng/mypage/aboutpoint"><i>About Points</i></a></li>
|
<li class="menu_list_item"><a href="https://www.dlsite.com/eng/circle/invite"><i>Submit Your Works</i></a></li>
|
||||||
</ul>
|
<li class="menu_list_item"><a href="https://www.dlsite.com/eng/guide/payment"><i>About Payment Method</i></a></li>
|
||||||
|
<li class="menu_list_item"><a href="https://www.dlsite.com/eng/mypage/aboutpoint"><i>About Points</i></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /ガイドメニュー -->
|
<!-- /ガイドメニュー -->
|
||||||
@@ -252,18 +255,22 @@ if ((dlsite.isAdult() && dlsite.getId() !== 'circle' && !(dlsite.isFemale() && d
|
|||||||
|
|
||||||
<div class="floorNavLink"><div class="floorNavLink-item type-adult"><a href="https://www.dlsite.com/ecchi-eng/">View R18 Products</a></div></div>
|
<div class="floorNavLink"><div class="floorNavLink-item type-adult"><a href="https://www.dlsite.com/ecchi-eng/">View R18 Products</a></div></div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="headerNav">
|
<div class="floorSubNav">
|
||||||
<li class="headerNav-item">
|
<div class="floorSubNav-item">
|
||||||
<a v-if="isRankingFilterCondition" v-cloak href="https://www.dlsite.com/eng/ranking/month?date=30d">Ranking</a>
|
<ul class="headerNav">
|
||||||
<a v-else href="https://www.dlsite.com/eng/ranking/month">Ranking</a>
|
<li class="headerNav-item">
|
||||||
</li>
|
<a v-if="isRankingFilterCondition" v-cloak href="https://www.dlsite.com/eng/ranking/month?date=30d">Ranking</a>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/fsr/=/options/ENG">English Version</a></li>
|
<a v-else href="https://www.dlsite.com/eng/ranking/month">Ranking</a>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/fsr/=/campaign/241">Discount</a></li>
|
</li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/new">Releases</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/fsr/=/options/ENG">English Version</a></li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/announce/list/day">Upcoming</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/fsr/=/campaign/241">Discount</a></li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/circle/list">Circle</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/new">Releases</a></li>
|
||||||
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/fs">Advanced Search</a></li>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/announce/list/day">Upcoming</a></li>
|
||||||
</ul>
|
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/circle/list">Circle</a></li>
|
||||||
|
<li class="headerNav-item"><a href="https://www.dlsite.com/eng/fs">Advanced Search</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -287,7 +294,21 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
|
|
||||||
<!--data-vue-component="header-banner"-->
|
<!--data-vue-component="header-banner"-->
|
||||||
<div data-vue-component="header-banner" data-vue-async="true" data-section_name="campaign_header_banner">
|
<div data-vue-component="header-banner" data-vue-async="true" data-section_name="campaign_header_banner">
|
||||||
<div v-if="loading"></div>
|
<div v-if="loading" class="hd_cp_banner type_1bn">
|
||||||
|
<ul class="cp_bn_list">
|
||||||
|
<li class="cp_bn_item type_15">
|
||||||
|
<a href="https://www.dlsite.com/eng/campaign/sale201907">
|
||||||
|
<div class="cp_bn_inner">
|
||||||
|
<div class="cp_bn_reminder">
|
||||||
|
<div class="cp_bn_reminder_content"><i class="cp_bn_reminder_period type_date">~ SEP 17,</i><i class="cp_bn_reminder_period type_time">14:00</i></div>
|
||||||
|
</div>
|
||||||
|
<div class="cp_bn"><img src="/images/campaign/doujin_sale_1907/bn_hd_cp_01_eng.png"></div>
|
||||||
|
<div class="cp_bn_work blank"></div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div v-else-if="is_show_frame" :class="style" class="hd_cp_banner" v-cloak>
|
<div v-else-if="is_show_frame" :class="style" class="hd_cp_banner" v-cloak>
|
||||||
<ul class="cp_bn_list">
|
<ul class="cp_bn_list">
|
||||||
@@ -348,7 +369,7 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
<h1 itemprop="name" id="work_name">
|
<h1 itemprop="name" id="work_name">
|
||||||
<a href="https://www.dlsite.com/eng/work/=/product_id/RE228866.html" itemprop="url">With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]</a>
|
<a href="https://www.dlsite.com/eng/work/=/product_id/RE228866.html" itemprop="url">With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]</a>
|
||||||
</h1>
|
</h1>
|
||||||
<span class="link_twitter"><a href="https://twitter.com/share" class="twitter-share-button" data-url="https://dlsite.jp/enwtw/RE228866" data-text="With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]/Triangle!" data-lang="en" data-hashtags="DLsite">Tweet</a>
|
<span class="link_twitter"><a href="https://twitter.com/share" class="twitter-share-button" data-url="https://dlsite.jp/enwtw/RE228866" data-text="With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]/Triangle! 50%OFF Til Sep. 17, 2 p.m. (JST)" data-lang="en" data-hashtags="DLsite">Tweet</a>
|
||||||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
|
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
|
||||||
</span></div>
|
</span></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -363,17 +384,17 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
<!-- main_inner -->
|
<!-- main_inner -->
|
||||||
<div id="main_inner">
|
<div id="main_inner">
|
||||||
<div id="work_header" data-section_name="work_header">
|
<div id="work_header" data-section_name="work_header">
|
||||||
<div id="work_left" data-vue-component="product-evaluate" data-product-id="RE228866">
|
<div id="work_left">
|
||||||
<table cellspacing="0" id="work_value">
|
<table cellspacing="0" id="work_value" data-vue-component="product-evaluate" data-product-id="RE228866">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_rankin">
|
<td class="work_rankin">
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr>
|
<tr>
|
||||||
<td v-if="product.ranks.total" v-cloak class="crown_total" :title="'Total ranking (' + product.ranks.total.rank_date + ') / ' + product.ranks.total.rank"> </td>
|
<td v-if="product.ranks.total" v-cloak class="crown_total" :title="$t('product.evaluate.ranking_total' , [ product.ranks.total.rank_date, product.ranks.total.rank ])"> </td>
|
||||||
<td v-if="product.ranks.year" v-cloak class="crown_year" :title="'Year ' + product.ranks.year.rank_date + ' ranking / ' + product.ranks.year.rank"> </td>
|
<td v-if="product.ranks.year" v-cloak class="crown_year" :title="$t('product.evaluate.ranking_year' , [ product.ranks.year.rank_date , product.ranks.year.rank ])"> </td>
|
||||||
<td v-if="product.ranks.month" v-cloak class="crown_month" :title="'Monthly chart (' + product.ranks.month.rank_date + ') / ' + product.ranks.month.rank"> </td>
|
<td v-if="product.ranks.month" v-cloak class="crown_month" :title="$t('product.evaluate.ranking_monthly', [ product.ranks.month.rank_date, product.ranks.month.rank ])"> </td>
|
||||||
<td v-if="product.ranks.week" v-cloak class="crown_week" :title="'Weekly chart (' + product.ranks.week.rank_date + ') / ' + product.ranks.week.rank"> </td>
|
<td v-if="product.ranks.week" v-cloak class="crown_week" :title="$t('product.evaluate.ranking_weekly' , [ product.ranks.week.rank_date , product.ranks.week.rank ])"> </td>
|
||||||
<td v-if="product.ranks.day" v-cloak class="crown_hour" :title="'Daily chart (' + product.ranks.day.rank_date + ') / ' + product.ranks.day.rank"> </td>
|
<td v-if="product.ranks.day" v-cloak class="crown_hour" :title="$t('product.evaluate.ranking_daily' , [ product.ranks.day.rank_date , product.ranks.day.rank ])"> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
@@ -452,14 +473,22 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td v-if="product.review_count" v-cloak class="work_review"><a class="_review_count" href="#review_link"><div title="レビューあり">({{ product.review_count }})</div></a></td>
|
<td v-if="product.review_count" v-cloak class="work_review">
|
||||||
<td class="work_dl" v-if="product.dl_count !== undefined && product.dl_count > 0" v-cloak><div>Purchased: <span class="_dl_count">{{ product.dl_count }}</span> times</div></td>
|
<a class="_review_count" href="#review_link"><div :title="$t('product.evaluate.with_review')" v-text="product.review_count"></div></a>
|
||||||
<td class="work_dl" v-if="product.wishlist_count !== undefined && product.wishlist_count > 0" v-cloak><div>Favorited: <span>{{ product.wishlist_count }}</span></div></td>
|
</td>
|
||||||
|
<!-- 販売 / DL数 -->
|
||||||
|
<td class="work_dl" v-if="product.dl_count !== undefined && product.dl_count > 0" v-cloak>
|
||||||
|
<div v-html="$t('product.evaluate.purchase_count', [ product.dl_count ])"></div>
|
||||||
|
</td>
|
||||||
|
<!-- お気に入り数 -->
|
||||||
|
<td class="work_dl" v-if="product.wishlist_count !== undefined && product.wishlist_count > 0" v-cloak>
|
||||||
|
<div v-html="$t('product.evaluate.favorite_count', [ product.wishlist_count ])"></div>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<product-slider product_id="RE228866" inline-template>
|
<div data-vue-component="product-slider" data-product-id="RE228866">
|
||||||
|
|
||||||
<div class="product-slider">
|
<div class="product-slider">
|
||||||
<!-- Sample image data -->
|
<!-- Sample image data -->
|
||||||
@@ -512,9 +541,10 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</div>
|
</div>
|
||||||
<div v-cloak class="work_slider_comp" v-if="items.length > 1">
|
<div v-cloak class="work_slider_comp" v-if="items.length > 1">
|
||||||
|
|
||||||
<a href="https://www.dlsite.com/eng/popup/=/file/smp1/product_id/RE228866.html" target="_blank">Display in HTML format</a>
|
<a rel="noopener" href="https://www.dlsite.com/eng/popup/=/file/smp1/product_id/RE228866.html" target="_blank">Display in HTML format</a>
|
||||||
|
|
||||||
<span>{{ __('totalImages', {count: items.length}) }}</span>
|
<!-- 枚数 -->
|
||||||
|
<span v-t="{ path: 'product.slider.totalImages', args: [items.length] }"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Popup viewer -->
|
<!-- Popup viewer -->
|
||||||
@@ -524,7 +554,7 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
<div class="slider_popup_rightpane">
|
<div class="slider_popup_rightpane">
|
||||||
<div class="slider_popup_sidebar">
|
<div class="slider_popup_sidebar">
|
||||||
<template v-for="(item, index) in items">
|
<template v-for="(item, index) in items">
|
||||||
<div target="_blank" :class="{active:(index === swiper.realIndex)}" @click="slideTo(index, false)">
|
<div rel="noopener" target="_blank" :class="{active:(index === swiper.realIndex)}" @click="slideTo(index, false)">
|
||||||
|
|
||||||
<img :src="item.thumb.src" alt="With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing] [Triangle!]">
|
<img :src="item.thumb.src" alt="With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing] [Triangle!]">
|
||||||
|
|
||||||
@@ -549,15 +579,15 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</div>
|
</div>
|
||||||
<div class="slider_popup_tool">
|
<div class="slider_popup_tool">
|
||||||
<input id="target1" class="checkbox" name="target" type="checkbox" value="1" v-model="alwaysActualSize" @change="toggleActualSize" @click="toggleActualSize">
|
<input id="target1" class="checkbox" name="target" type="checkbox" value="1" v-model="alwaysActualSize" @change="toggleActualSize" @click="toggleActualSize">
|
||||||
<label for="target1" class="checkbox-label">{{ __('alwaysActual') }}</label>
|
<label for="target1" class="checkbox-label" v-t="'product.slider.alwaysActual'"></label>
|
||||||
<span class="slider_popup_description">{{ __('tools') }}</span>
|
<span class="slider_popup_description" v-t="'product.slider.tools'"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</product-slider>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -609,16 +639,11 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<th>Option</th>
|
|
||||||
<td>
|
|
||||||
<div class="work_genre"><a href="https://www.dlsite.com/eng/fsr/=/work_category%5B0%5D/doujin/options/SND/from/icon.work"><span class="icon_SND" title="Inc. Voice">Inc. Voice</span></a><a href="https://www.dlsite.com/eng/fsr/=/work_category%5B0%5D/doujin/options/TRI/from/icon.work"><span class="icon_TRI" title="Trial">Trial</span></a></div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
<tr><th>Genre</th><td><div class="main_genre"><a href="https://www.dlsite.com/eng/fsr/=/genre/056/from/work.genre">Healing</a><a href="https://www.dlsite.com/eng/fsr/=/genre/496/from/work.genre">Binaural</a><a href="https://www.dlsite.com/eng/fsr/=/genre/497/from/work.genre">ASMR</a><a href="https://www.dlsite.com/eng/fsr/=/genre/442/from/work.genre">Ear Cleaning</a><a href="https://www.dlsite.com/eng/fsr/=/genre/004/from/work.genre">Lovey Dovey/Sweet Love</a><a href="https://www.dlsite.com/eng/fsr/=/genre/222/from/work.genre">Childhood Friend</a>
|
||||||
<tr><th>Genre</th><td><div class="main_genre"><a href="https://www.dlsite.com/eng/fsr/=/genre/056/from/work.genre">Healing</a><a href="https://www.dlsite.com/eng/fsr/=/genre/496/from/work.genre">Binaural</a><a href="https://www.dlsite.com/eng/fsr/=/genre/497/from/work.genre">ASMR</a><a href="https://www.dlsite.com/eng/fsr/=/genre/222/from/work.genre">Childhood Friend</a><a href="https://www.dlsite.com/eng/fsr/=/genre/442/from/work.genre">Ear Cleaning</a><a href="https://www.dlsite.com/eng/fsr/=/genre/004/from/work.genre">Romance</a><a href="https://www.dlsite.com/eng/fsr/=/genre/306/from/work.genre">Romance</a><a href="https://www.dlsite.com/eng/fsr/=/genre/494/from/work.genre">Romance</a></div></td></tr>
|
</div></td></tr>
|
||||||
|
|
||||||
<tr><th>File Size</th><td><div class="main_genre">1.35GB</div></td></tr>
|
<tr><th>File Size</th><td><div class="main_genre">1.35GB</div></td></tr>
|
||||||
|
|
||||||
@@ -668,7 +693,7 @@ if ($.cookie('loginchecked') >= 1) {
|
|||||||
|
|
||||||
<div class="title_01 clearfix"><h2>Contents</h2></div>
|
<div class="title_01 clearfix"><h2>Contents</h2></div>
|
||||||
<div itemprop="description" class="work_article work_story">** Special Site **<br />
|
<div itemprop="description" class="work_article work_story">** Special Site **<br />
|
||||||
<a rel="nofollow" href="http://www.miyuki-web.net/hatsukoiobake/" target="_blank">http://www.miyuki-web.net/hatsukoiobake/</a><br />
|
<a rel="noopener nofollow" href="http://www.miyuki-web.net/hatsukoiobake/" target="_blank">http://www.miyuki-web.net/hatsukoiobake/</a><br />
|
||||||
<br />
|
<br />
|
||||||
"Yui Asami meets First Love"<br />
|
"Yui Asami meets First Love"<br />
|
||||||
<br />
|
<br />
|
||||||
@@ -683,7 +708,7 @@ To look silly in public may affect your social status.<br />
|
|||||||
[Synopsis]<br />
|
[Synopsis]<br />
|
||||||
<br />
|
<br />
|
||||||
* Prequel:<br />
|
* Prequel:<br />
|
||||||
<a href="http://www.dlsite.com/eng/work/=/product_id/RE180674.html" target="_blank">http://www.dlsite.com/eng/work/=/product_id/RE180674.html</a><br />
|
<a rel="noopener" href="http://www.dlsite.com/eng/work/=/product_id/RE180674.html" target="_blank">http://www.dlsite.com/eng/work/=/product_id/RE180674.html</a><br />
|
||||||
<br />
|
<br />
|
||||||
Having got in a relationship, you and Natsumi go to a mountain for camping.<br />
|
Having got in a relationship, you and Natsumi go to a mountain for camping.<br />
|
||||||
However...there is a thing that traumatized young Natsumi in the mountain...!?<br />
|
However...there is a thing that traumatized young Natsumi in the mountain...!?<br />
|
||||||
@@ -727,7 +752,7 @@ Bonuses:<br />
|
|||||||
<br />
|
<br />
|
||||||
[Credits]<br />
|
[Credits]<br />
|
||||||
CV: Yui Asami<br />
|
CV: Yui Asami<br />
|
||||||
Script: TOMOYA HIRATA (Project E.L.C)<br />
|
Script: Project E.L.C<br />
|
||||||
Illustration: Yatomi<br />
|
Illustration: Yatomi<br />
|
||||||
Web Design: Guzuri Takamachi / Aoi Kazuki<br />
|
Web Design: Guzuri Takamachi / Aoi Kazuki<br />
|
||||||
Logo Design: juda53 / SAKANAC<br />
|
Logo Design: juda53 / SAKANAC<br />
|
||||||
@@ -1035,11 +1060,10 @@ jQuery(function($){
|
|||||||
|
|
||||||
<div class="work_article" id="work_review" data-section_name="work_review">
|
<div class="work_article" id="work_review" data-section_name="work_review">
|
||||||
|
|
||||||
<!-- review_head -->
|
|
||||||
<div class="review_head clearfix">
|
<div class="review_head">
|
||||||
<p class="float_l review_count"><span class="fs20">0</span> user reviews</p>
|
<p class="float_l review_count"><span class="fs20">0</span> user reviews</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- /review_head -->
|
|
||||||
|
|
||||||
<!-- work_review_list -->
|
<!-- work_review_list -->
|
||||||
<table id="work_review_list" cellspacing="0">
|
<table id="work_review_list" cellspacing="0">
|
||||||
@@ -1116,7 +1140,7 @@ jQuery(function($){
|
|||||||
<div v-if="product.is_discount || product.is_pointup || rentaled" class="campaign_info">
|
<div v-if="product.is_discount || product.is_pointup || rentaled" class="campaign_info">
|
||||||
<p v-if="rentaled" class="type_rental"><span>レンタル期間中割引<span class="limit">あと{{ rentaled.limit }}</span><span class="period">{{ rentaled.period }}まで</span></span></p>
|
<p v-if="rentaled" class="type_rental"><span>レンタル期間中割引<span class="limit">あと{{ rentaled.limit }}</span><span class="period">{{ rentaled.period }}まで</span></span></p>
|
||||||
<p v-if="product.is_discount" class="type_sale">
|
<p v-if="product.is_discount" class="type_sale">
|
||||||
<a v-if="product.discount_to" :href="product.discount_to" :title="product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF'" target="_blank"><span>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span></a>
|
<a rel="noopener" v-if="product.discount_to" :href="product.discount_to" :title="product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF'" target="_blank"><span>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span></a>
|
||||||
<span v-else>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span>
|
<span v-else>{{ product.discount_rate == 100 ? 'Free' : product.discount_rate + '%OFF' }}<span class="period" v-if="product.discount_end_date">Til {{ product.discount_end_date }}</span></span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -1182,7 +1206,7 @@ jQuery(function($){
|
|||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<template v-if="is_bought">
|
<template v-if="is_bought">
|
||||||
<p class="work_stream"><a href="https://play.dlsite.com/eng/?workno=RE228866" class="btn_st" :class="{ disabled: ! product.dlsiteplay_work || product.dl_format == 16 }" title="Open in DLsite Play" target="_blank">Open in DLsite Play</a></p>
|
<p class="work_stream"><a rel="noopener" href="https://play.dlsite.com/eng/?workno=RE228866" class="btn_st" :class="{ disabled: ! product.dlsiteplay_work || product.dl_format == 16 }" title="Open in DLsite Play" target="_blank">Open in DLsite Play</a></p>
|
||||||
<p class="work_cart"><a :href="product.down_url" class="btn_dl" :class="{ disabled: product.dl_format == 17 }">Download</a></p>
|
<p class="work_cart"><a :href="product.down_url" class="btn_dl" :class="{ disabled: product.dl_format == 17 }">Download</a></p>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="is_already">
|
<template v-else-if="is_already">
|
||||||
@@ -1238,7 +1262,7 @@ jQuery(function($){
|
|||||||
<div class="work_buy_body">
|
<div class="work_buy_body">
|
||||||
<div class="work_buy_label">Price</div>
|
<div class="work_buy_label">Price</div>
|
||||||
<div class="work_buy_content">
|
<div class="work_buy_content">
|
||||||
<span class="price">$8.95 / €7.94<i class="work_estimation">(estimation)</i><i class="work_jpy">972 JPY</i></span>
|
<span class="price">$4.54 / €4.12<i class="work_estimation">(estimation)</i><i class="work_jpy">486 JPY</i></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1330,7 +1354,7 @@ jQuery(function($){
|
|||||||
<p v-if="product.is_rental" class="guide_message">レンタルでは購入特典は<br>付与されません。</p>
|
<p v-if="product.is_rental" class="guide_message">レンタルでは購入特典は<br>付与されません。</p>
|
||||||
|
|
||||||
<ul class="guide_list">
|
<ul class="guide_list">
|
||||||
<li><a href="https://www.dlsite.com/eng/faq/detail/=/type/user/mid/5/did/297" target="_blank">About Purchase Bonus</a></li>
|
<li><a rel="noopener" href="https://www.dlsite.com/eng/faq/detail/=/type/user/mid/5/did/297" target="_blank">About Purchase Bonus</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1372,7 +1396,7 @@ jQuery(function($){
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Windows</td>
|
<td>Windows</td>
|
||||||
<td>Windows7 / Windows8 / Windows8.1 / Windows10</td>
|
<td>-</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Mac</td>
|
<td>Mac</td>
|
||||||
@@ -1419,44 +1443,44 @@ jQuery(function($){
|
|||||||
<table cellspacing="0" class="same_work">
|
<table cellspacing="0" class="same_work">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE180674.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ181000/RJ180674_img_sam_mini.jpg" alt="Fireworks With First Love Girlfriend [Ear Cleaning] [Fall Asleep] [Triangle!]" title="Fireworks With First Love Girlfriend [Ear Cleaning] [Fall Asleep] [Triangle!]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE180674.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ181000/RJ180674_img_sam_mini.jpg" alt="Fireworks With First Love Girlfriend [Ear Cleaning] [Fall Asleep] [Triangle!]" title="Fireworks With First Love Girlfriend [Ear Cleaning] [Fall Asleep] [Triangle!]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE180674.html">Fireworks With First Love Girlfriend [Ear Cleaning] [Fall Asleep]</a></span>
|
<td class="name"> <div class="icon_wrap"><span class="icon_lead_01 type_sale">50%OFF</span></div> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE180674.html">Fireworks With First Love Girlfriend [Ear Cleaning] [Fall Asleep]</a></span>
|
||||||
<span class="work_price">$8.95</span>
|
<span class="work_price">$4.54</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE176184.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ177000/RJ176184_img_sam_mini.jpg" alt="Hanikami Commute Date-chu! [Soothing Audio] [Triangle!]" title="Hanikami Commute Date-chu! [Soothing Audio] [Triangle!]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE176184.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ177000/RJ176184_img_sam_mini.jpg" alt="Hanikami Commute Date-chu! [Soothing Audio] [Triangle!]" title="Hanikami Commute Date-chu! [Soothing Audio] [Triangle!]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE176184.html">Hanikami Commute Date-chu! [Soothing Audio]</a></span>
|
<td class="name"> <div class="icon_wrap"><span class="icon_lead_01 type_sale">50%OFF</span></div> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE176184.html">Hanikami Commute Date-chu! [Soothing Audio]</a></span>
|
||||||
<span class="work_price">$6.96</span>
|
<span class="work_price">$3.53</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073910.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073910_img_sam_mini.jpg" alt="Trianthology! ACE [Triangle!]" title="Trianthology! ACE [Triangle!]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073910.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073910_img_sam_mini.jpg" alt="Trianthology! ACE [Triangle!]" title="Trianthology! ACE [Triangle!]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073910.html">Trianthology! ACE</a></span>
|
<td class="name"> <div class="icon_wrap"><span class="icon_lead_01 type_sale">50%OFF</span></div> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073910.html">Trianthology! ACE</a></span>
|
||||||
<span class="work_price">$2.98</span>
|
<span class="work_price">$1.51</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073917.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073917_img_sam_mini.jpg" alt="Trianthology! X [Triangle!]" title="Trianthology! X [Triangle!]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073917.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073917_img_sam_mini.jpg" alt="Trianthology! X [Triangle!]" title="Trianthology! X [Triangle!]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073917.html">Trianthology! X</a></span>
|
<td class="name"> <div class="icon_wrap"><span class="icon_lead_01 type_sale">50%OFF</span></div> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073917.html">Trianthology! X</a></span>
|
||||||
<span class="work_price">$3.98</span>
|
<span class="work_price">$2.01</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073911.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073911_img_sam_mini.jpg" alt="Misato 4Coma Anthology [Triangle!]" title="Misato 4Coma Anthology [Triangle!]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073911.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073911_img_sam_mini.jpg" alt="Misato 4Coma Anthology [Triangle!]" title="Misato 4Coma Anthology [Triangle!]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073911.html">Misato 4Coma Anthology</a></span>
|
<td class="name"> <div class="icon_wrap"><span class="icon_lead_01 type_sale">50%OFF</span></div> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073911.html">Misato 4Coma Anthology</a></span>
|
||||||
<span class="work_price">$2.98</span>
|
<span class="work_price">$1.51</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073920.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073920_img_sam_mini.jpg" alt="TRIF: trif [Triangle!]" title="TRIF: trif [Triangle!]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073920.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ074000/RJ073920_img_sam_mini.jpg" alt="TRIF: trif [Triangle!]" title="TRIF: trif [Triangle!]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073920.html">TRIF: trif</a></span>
|
<td class="name"> <div class="icon_wrap"><span class="icon_lead_01 type_sale">50%OFF</span></div> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE073920.html">TRIF: trif</a></span>
|
||||||
<span class="work_price">$14.93</span>
|
<span class="work_price">$7.57</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE081812.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ082000/RJ081812_img_sam_mini.jpg" alt="See You Again in the SMILE [Triangle!]" title="See You Again in the SMILE [Triangle!]" class="target_type" /></a></td>
|
<td class="work_img"><a href="https://www.dlsite.com/eng/work/=/product_id/RE081812.html"><img src="//img.dlsite.jp/modpub/images2/work/doujin/RJ082000/RJ081812_img_sam_mini.jpg" alt="See You Again in the SMILE [Triangle!]" title="See You Again in the SMILE [Triangle!]" class="target_type" /></a></td>
|
||||||
<td class="name"> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE081812.html">See You Again in the SMILE </a></span>
|
<td class="name"> <div class="icon_wrap"><span class="icon_lead_01 type_sale">50%OFF</span></div> <span class="work_name"><a href="https://www.dlsite.com/eng/work/=/product_id/RE081812.html">See You Again in the SMILE </a></span>
|
||||||
<span class="work_price">$3.98</span>
|
<span class="work_price">$2.01</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -1513,97 +1537,103 @@ jQuery(function($){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- footer -->
|
<!-- footer -->
|
||||||
<div id="footer" data-section_name="footer">
|
<div id="footer" data-section_name="footer">
|
||||||
|
|
||||||
<div class="pagetop_block clearfix">
|
<div class="pagetop_block clearfix">
|
||||||
<p class="pagetop"><a href="#header">Back to Top</a></p>
|
<p class="pagetop"><a href="#header">Back to Top</a></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer_link_01">
|
<div class="footer_floor_nav">
|
||||||
<ul>
|
<ul class="floor_list">
|
||||||
<li><a href="https://www.dlsite.com/">DLsite Home Page</a></li>
|
<li class="floor_list_item"><a href="https://www.dlsite.com/">DLsite Home Page</a></li>
|
||||||
<li><a href="https://www.dlsite.com/eng/">Doujin</a></li>
|
<li class="floor_list_item"><a href="https://www.dlsite.com/eng/">Doujin</a></li>
|
||||||
<li><a href="https://www.dlsite.com/ecchi-eng/">Adult Doujin</a></li>
|
<li class="floor_list_item"><a href="https://www.dlsite.com/ecchi-eng/">Adult Doujin</a></li>
|
||||||
<li class="sp_switch"><a id="_touch_link" href="https://www.dlsite.com/eng-touch/work/=/product_id/RE228866.html" data-platform="touch">DLsite Mobile Site</a></li>
|
<li class="floor_list_item sp_switch"><a id="_touch_link" href="https://www.dlsite.com/eng-touch/work/=/product_id/RE228866.html" data-platform="touch">For Smartphone</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer_section">
|
<div class="footer_section">
|
||||||
<div class="section_container clearfix">
|
<div class="footer_section_inner">
|
||||||
<ul class="link_list">
|
<div class="link_list_wrap">
|
||||||
<li class="list_item">
|
<div class="link_list_box col_2">
|
||||||
<div class="label">About DLsite</div>
|
<div class="label">About DLsite</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.eisys.co.jp/company/company-overview.html" target="_blank">About our Company</a></dd>
|
<li class="link_list_item"><a rel="noopener" href="https://www.eisys.co.jp/company/company-overview.html" target="_blank">About our Company</a></li>
|
||||||
<dd><a href="https://eisys.talentcld.com/" target="_blank">Career Information</a></dd>
|
<li class="link_list_item"><a rel="noopener" href="https://eisys.talentcld.com/" target="_blank">Career Information</a></li>
|
||||||
<dd><a href="https://twitter.com/DLsiteEnglish" target="_blank" class="twitter">Twitter</a> / <a href="https://www.facebook.com/DLsite-English-159690760755693/" target="_blank" class="facebook">Facebook</a> / <a href="http://dlsite-english.tumblr.com/" target="_blank" class="tumblr">Tumblr</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/user/regulations">User Agreement</a></li>
|
||||||
</dl>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/guide/law">Legal Statement (ASCT)</a></li>
|
||||||
</li>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/guide/settlement">Legal Statement (PSA)</a></li>
|
||||||
<li class="list_item">
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/guide/privacy">Privacy Policy</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/mosaic">Compliance Policy</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/guide/copy">Copyright</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/banners">Link to DLsite</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/sitemap">Site Map</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="link_list_box">
|
||||||
<div class="label">Payment / Points</div>
|
<div class="label">Payment / Points</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.dlsite.com/eng/guide/payment">Payment Methods</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/guide/payment">Payment Methods</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/eng/mypage/aboutpoint">About Points</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/mypage/aboutpoint">About Points</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/eng/mypage/aboutpoint#gp3">How to Buy Points</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/mypage/aboutpoint#gp3">How to Buy Points</a></li>
|
||||||
</dl>
|
</ul>
|
||||||
</li>
|
</div>
|
||||||
<li class="list_item">
|
<div class="link_list_box">
|
||||||
<div class="label">Help / Guide</div>
|
<div class="label">Help / Guide</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.dlsite.com/eng/welcome">New to DLsite?</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/welcome">New to DLsite?</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/eng/faq/=/type/user" target="_blank">Frequently Asked Questions</a></dd>
|
<li class="link_list_item"><a rel="noopener" href="https://www.dlsite.com/eng/faq/=/type/user" target="_blank">Frequently Asked Questions</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/eng/opinion/contribution">Product Request / Feedback</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/opinion/contribution">Product Request / Feedback</a></li>
|
||||||
<dd><a href="https://ssl.dlsite.com/eng/mypage/setting/mail">Newsletter</a></dd>
|
</ul>
|
||||||
<dd><a href="https://www.dlsite.com/eng/sitemap">Site Map</a></dd>
|
</div>
|
||||||
</dl>
|
<div class="link_list_box">
|
||||||
</li>
|
|
||||||
<li class="list_item">
|
|
||||||
<div class="label">DLsite Services</div>
|
<div class="label">DLsite Services</div>
|
||||||
<dl>
|
<ul class="link_list">
|
||||||
<dd><a href="https://www.dlsite.com/eng/circle/invite">Submit Your Works</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/circle/invite">Submit Your Works</a></li>
|
||||||
<dd><a href="https://www.dlsite.com/eng/guide/affiliate">Affiliate Program</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/guide/affiliate">Affiliate Program</a></li>
|
||||||
</dl>
|
<li class="link_list_item"><a href="https://ssl.dlsite.com/eng/mypage/setting/mail">Newsletter</a></li>
|
||||||
</li>
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer_section_inner sns">
|
||||||
|
<div class="label">Official SNS Accounts</div>
|
||||||
|
<ul class="footer_sns">
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://twitter.com/DLsiteEnglish" target="_blank" class="twitter">Twitter</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://www.facebook.com/DLsite-English-159690760755693/" target="_blank" class="facebook">Facebook</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="http://dlsite-english.tumblr.com/" target="_blank" class="tumblr">Tumblr</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://www.instagram.com/dlsite_english/" target="_blank" class="instagram">Instagram</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://www.youtube.com/channel/UCGKtTGBPGmB5d9jg-fIZc8w" target="_blank" class="youtube">Youtube</a></li>
|
||||||
|
<li class="footer_sns_item"><a rel="noopener" href="https://discordapp.com/channels/555918616793710592/" target="_blank" class="discord">Discord</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section_container type_multilingual clearfix">
|
<div class="footer_section_inner multilingual">
|
||||||
<ul class="link_list">
|
<div class="link_list_wrap">
|
||||||
<li class="list_item">
|
<div class="link_list_box">
|
||||||
|
<div class="label">International</div>
|
||||||
|
<ul class="link_list type_horizontal">
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/home/">日本語</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/">English</a></li>
|
||||||
|
<li class="link_list_item"><a href="https://www.dlsite.com.tw/home/">繁體中文</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="link_list_box">
|
||||||
<div class="label">Global Guide</div>
|
<div class="label">Global Guide</div>
|
||||||
<dl>
|
<ul class="link_list type_horizontal">
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/eng/welcome">English</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/welcome">English</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/eng/welcome/deu">Deutsch</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/welcome/deu">Deutsch</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/eng/welcome/fra">Français</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/welcome/fra">Français</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/eng/welcome/ita">Italiano</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/welcome/ita">Italiano</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/eng/welcome/esp">Español</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/welcome/esp">Español</a></li>
|
||||||
<dd class="list_item"><a href="https://www.dlsite.com/eng/welcome/chi">繁體中文</a></dd>
|
<li class="link_list_item"><a href="https://www.dlsite.com/eng/welcome/chi">繁體中文</a></li>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</div>
|
||||||
</ul>
|
|
||||||
<div class="language_container">
|
|
||||||
<div class="label">Language</div>
|
|
||||||
<select name="language" id="language_select" onchange="location.href=value;">
|
|
||||||
<option value="https://www.dlsite.com/home/" >日本語</option>
|
|
||||||
<option value="https://www.dlsite.com/eng/" selected>English</option>
|
|
||||||
<option value="https://www.dlsite.com.tw/home/">繁體中文</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="copyright">
|
<div id="copyright">
|
||||||
<div class="container clearfix">
|
<div class="container clearfix">
|
||||||
<div id="system">Recommended browsers: The latest version of Internet Explorer, Microsoft Edge, Safari, Chrome or Firefox with JavaScript/cookies enabled.</div>
|
<div id="system">Recommended browsers: The latest version of Internet Explorer, Microsoft Edge, Safari, Chrome or Firefox with JavaScript/cookies enabled.</div>
|
||||||
<ul id="footer_nav">
|
|
||||||
<li><a href="https://www.dlsite.com/eng/user/regulations">User Agreement</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/eng/guide/law">Legal Statement (ASCT)</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/eng/guide/settlement">Legal Statement (PSA)</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/eng/guide/privacy">Privacy Policy</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/eng/mosaic">Compliance Policy</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/eng/guide/copy">Copyright</a></li>
|
|
||||||
<li><a href="https://www.dlsite.com/eng/banners">Link to DLsite</a></li>
|
|
||||||
</ul>
|
|
||||||
<p>© 1996 DLsite</p>
|
<p>© 1996 DLsite</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1628,8 +1658,8 @@ jQuery(function($){
|
|||||||
|
|
||||||
<div data-vue-component="cookie-policy" data-async="true"></div>
|
<div data-vue-component="cookie-policy" data-async="true"></div>
|
||||||
|
|
||||||
<script type="text/javascript" src="/vue/js/pc/vendor.js?cdn_cache=1&v=0.1.2&_=1536029038"></script>
|
<script type="text/javascript" src="/vue/js/pc/vendor.js?cdn_cache=1&v=0.1.2&_=1561425273"></script>
|
||||||
<script type="text/javascript" src="/vue/js/pc/app.js?cdn_cache=1&v=0.1.2&_=1559289223"></script>
|
<script type="text/javascript" src="/vue/js/pc/app.js?cdn_cache=1&v=0.1.2&_=1567559800"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@@ -1672,6 +1702,6 @@ div.measure_tag {
|
|||||||
|
|
||||||
|
|
||||||
<!-- /script_footer -->
|
<!-- /script_footer -->
|
||||||
<script type="text/javascript">var contents = {"impression":[],"detail":[{"id":"RE228866","name":"With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]","category":"eng","brand":"RG14177","price":900,"regist_date":"2018\/10\/02","image_main":"\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ229000\/RJ228866_img_main.jpg","restore_price":null}],"time":0.0001552104949951172};</script>
|
<script type="text/javascript">var contents = {"impression":[],"detail":[{"id":"RE228866","name":"With Your First Girlfriend, at a Ghostly Night [Ear Cleaning] [Sleep Sharing]","category":"eng","brand":"RG14177","price":450,"regist_date":"2018\/10\/02","image_main":"\/\/img.dlsite.jp\/modpub\/images2\/work\/doujin\/RJ229000\/RJ228866_img_main.jpg","restore_price":"900"}],"time":0.00013399124145507812};</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
1008
tests/fixture/DLsite/testGirls.html
vendored
1008
tests/fixture/DLsite/testGirls.html
vendored
File diff suppressed because it is too large
Load Diff
777
tests/fixture/DLsite/testGirlsPro.html
vendored
777
tests/fixture/DLsite/testGirlsPro.html
vendored
File diff suppressed because it is too large
Load Diff
2305
tests/fixture/DLsite/testHTMLdescription.html
vendored
Normal file
2305
tests/fixture/DLsite/testHTMLdescription.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1097
tests/fixture/DLsite/testHome.html
vendored
1097
tests/fixture/DLsite/testHome.html
vendored
File diff suppressed because it is too large
Load Diff
1069
tests/fixture/DLsite/testManiax.html
vendored
1069
tests/fixture/DLsite/testManiax.html
vendored
File diff suppressed because it is too large
Load Diff
1206
tests/fixture/DLsite/testPro.html
vendored
1206
tests/fixture/DLsite/testPro.html
vendored
File diff suppressed because it is too large
Load Diff
944
tests/fixture/DLsite/testSoft.html
vendored
944
tests/fixture/DLsite/testSoft.html
vendored
File diff suppressed because it is too large
Load Diff
1
tests/fixture/DeviantArt/mature.json
vendored
Normal file
1
tests/fixture/DeviantArt/mature.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":"1.0","type":"photo","title":"R-15 mabel and will update","category":"Fan Art > Manga & Anime > Digital > Movies & TV","url":"https:\/\/images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com\/f\/6854f36d-8010-4cd0-9d62-0cf9b7829764\/dbcfq2q-d78c9f6e-dced-4e5c-a345-2a1bfd5d7620.jpg\/v1\/fill\/w_1193,h_670,q_70,strp\/r_15_mabel_and_will_update_by_gatanii69_dbcfq2q-pre.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODQyIiwicGF0aCI6IlwvZlwvNjg1NGYzNmQtODAxMC00Y2QwLTlkNjItMGNmOWI3ODI5NzY0XC9kYmNmcTJxLWQ3OGM5ZjZlLWRjZWQtNGU1Yy1hMzQ1LTJhMWJmZDVkNzYyMC5qcGciLCJ3aWR0aCI6Ijw9MTUwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.6Vj946U_q31oKJDfyUfJGCj-kufd47zV1RjCtN_qtVc","author_name":"gatanii69","author_url":"https:\/\/www.deviantart.com\/gatanii69","provider_name":"DeviantArt","provider_url":"https:\/\/www.deviantart.com","safety":"adult","pubdate":"2017-06-12T06:08:10-07:00","community":{"statistics":{"_attributes":{"views":8322,"favorites":405,"comments":56,"downloads":50}}},"rating":"adult","tags":"nsfw, reversefalls, gravityfalls, gravityfallsfanart, mabelpines, billcipher, reversemabel, willcipher, reversebill, reversebillcipher, mawill","copyright":{"_attributes":{"url":"https:\/\/www.deviantart.com\/gatanii69","year":"2017","entity":"gatanii69"}},"width":1193,"height":670,"imagetype":"","thumbnail_url":"https:\/\/images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com\/f\/6854f36d-8010-4cd0-9d62-0cf9b7829764\/dbcfq2q-d78c9f6e-dced-4e5c-a345-2a1bfd5d7620.jpg\/v1\/fit\/w_300,h_842,q_70,strp\/r_15_mabel_and_will_update_by_gatanii69_dbcfq2q-300w.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODQyIiwicGF0aCI6IlwvZlwvNjg1NGYzNmQtODAxMC00Y2QwLTlkNjItMGNmOWI3ODI5NzY0XC9kYmNmcTJxLWQ3OGM5ZjZlLWRjZWQtNGU1Yy1hMzQ1LTJhMWJmZDVkNzYyMC5qcGciLCJ3aWR0aCI6Ijw9MTUwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.6Vj946U_q31oKJDfyUfJGCj-kufd47zV1RjCtN_qtVc","thumbnail_width":300,"thumbnail_height":168,"thumbnail_url_150":"https:\/\/images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com\/f\/6854f36d-8010-4cd0-9d62-0cf9b7829764\/dbcfq2q-d78c9f6e-dced-4e5c-a345-2a1bfd5d7620.jpg\/v1\/fit\/w_150,h_150,q_70,strp\/r_15_mabel_and_will_update_by_gatanii69_dbcfq2q-150.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODQyIiwicGF0aCI6IlwvZlwvNjg1NGYzNmQtODAxMC00Y2QwLTlkNjItMGNmOWI3ODI5NzY0XC9kYmNmcTJxLWQ3OGM5ZjZlLWRjZWQtNGU1Yy1hMzQ1LTJhMWJmZDVkNzYyMC5qcGciLCJ3aWR0aCI6Ijw9MTUwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.6Vj946U_q31oKJDfyUfJGCj-kufd47zV1RjCtN_qtVc","thumbnail_url_200h":"https:\/\/images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com\/f\/6854f36d-8010-4cd0-9d62-0cf9b7829764\/dbcfq2q-d78c9f6e-dced-4e5c-a345-2a1bfd5d7620.jpg\/v1\/fill\/w_300,h_168,q_70,strp\/r_15_mabel_and_will_update_by_gatanii69_dbcfq2q-200h.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODQyIiwicGF0aCI6IlwvZlwvNjg1NGYzNmQtODAxMC00Y2QwLTlkNjItMGNmOWI3ODI5NzY0XC9kYmNmcTJxLWQ3OGM5ZjZlLWRjZWQtNGU1Yy1hMzQ1LTJhMWJmZDVkNzYyMC5qcGciLCJ3aWR0aCI6Ijw9MTUwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.6Vj946U_q31oKJDfyUfJGCj-kufd47zV1RjCtN_qtVc","thumbnail_width_200h":300,"thumbnail_height_200h":168}
|
1
tests/fixture/Fantia/test.json
vendored
Normal file
1
tests/fixture/Fantia/test.json
vendored
Normal file
File diff suppressed because one or more lines are too long
1557
tests/fixture/Fanza/book.html
vendored
Normal file
1557
tests/fixture/Fanza/book.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3326
tests/fixture/Fanza/digital_anime.html
vendored
Normal file
3326
tests/fixture/Fanza/digital_anime.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3630
tests/fixture/Fanza/digital_videoa.html
vendored
Normal file
3630
tests/fixture/Fanza/digital_videoa.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3662
tests/fixture/Fanza/digital_videoc.html
vendored
Normal file
3662
tests/fixture/Fanza/digital_videoc.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2122
tests/fixture/Fanza/dlsoft.html
vendored
Normal file
2122
tests/fixture/Fanza/dlsoft.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4209
tests/fixture/Fanza/doujin.html
vendored
Normal file
4209
tests/fixture/Fanza/doujin.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1828
tests/fixture/Fanza/nosupport.html
vendored
Normal file
1828
tests/fixture/Fanza/nosupport.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
644
tests/fixture/Iwara/images.html
vendored
Normal file
644
tests/fixture/Iwara/images.html
vendored
Normal file
@@ -0,0 +1,644 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ja">
|
||||||
|
<head>
|
||||||
|
<title>鏡音りん18歳 | Iwara</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="x-dns-prefetch-control" content="on" />
|
||||||
|
<link rel="dns-prefetch" href="//i.iwara.tv" />
|
||||||
|
<!--[if IE 9]>
|
||||||
|
<link rel="prefetch" href="//i.iwara.tv" />
|
||||||
|
<![endif]-->
|
||||||
|
<meta name="Generator" content="Drupal 7 (http://drupal.org)" />
|
||||||
|
<link rel="canonical" href="https://iwara.tv/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3" />
|
||||||
|
<link rel="canonical" href="/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3" />
|
||||||
|
<link rel="shortlink" href="/node/67589" />
|
||||||
|
<link rel="shortcut icon" href="https://iwara.tv/misc/favicon.ico" type="image/vnd.microsoft.icon" />
|
||||||
|
<style type="text/css" media="all">
|
||||||
|
@import url("https://iwara.tv/modules/system/system.base.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/system/system.menus.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/system/system.messages.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/system/system.theme.css?pv5bfq");
|
||||||
|
</style>
|
||||||
|
<style type="text/css" media="all">
|
||||||
|
@import url("https://iwara.tv/modules/comment/comment.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/field/theme/field.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/node/node.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/user/user.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/forum/forum.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/sites/all/modules/contrib/views/css/views.css?pv5bfq");
|
||||||
|
</style>
|
||||||
|
<style type="text/css" media="all">
|
||||||
|
@import url("https://iwara.tv/sites/all/modules/contrib/ctools/css/ctools.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/sites/all/modules/contrib/video/css/video.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/modules/locale/locale.css?pv5bfq");
|
||||||
|
</style>
|
||||||
|
<style type="text/css" media="all">
|
||||||
|
@import url("https://iwara.tv/sites/all/themes/main/css/main.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/sites/all/themes/main/lib/video-js/video-js.min.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/sites/all/themes/main/lib/videojs-loopbutton/videojs.loopbutton.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/sites/all/themes/main/lib/videojs-resolution-switcher/videojs-resolution-switcher.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/sites/all/themes/main/lib/slick/slick.css?pv5bfq");
|
||||||
|
@import url("https://iwara.tv/sites/all/themes/main/lib/slick/slick-theme.css?pv5bfq");
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--//--><![CDATA[//><!--
|
||||||
|
window.google_analytics_domain_name = ".iwara.tv";window.google_analytics_uacct = "UA-37410039-11";
|
||||||
|
//--><!]]>
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--//--><![CDATA[//><!--
|
||||||
|
window.jQuery || document.write("<script src='/sites/all/modules/contrib/jquery_update/replace/jquery/1.10/jquery.min.js'>\x3C/script>")
|
||||||
|
//--><!]]>
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/misc/jquery.once.js?v=1.2"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/misc/drupal.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.cookie.js?v=67fb34f6a866c40d0570"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/jquery_update/replace/misc/jquery.form.min.js?v=2.69"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/misc/ajax.js?v=7.64"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/jquery_update/js/jquery_update.js?v=0.0.1"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/custom/user_management/user_management.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/default/files/languages/ja_InHMwhlJnpgeRQNauiTX5Z8i27Ho8-JuYjQwQykOyag.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/video/js/video.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/views/js/base.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/misc/progress.js?v=7.64"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/google_analytics/googleanalytics.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--//--><![CDATA[//><!--
|
||||||
|
(function(i,s,o,g,r,a,m){i["GoogleAnalyticsObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,"script","https://www.google-analytics.com/analytics.js","ga");ga("create", "UA-37410039-11", {"cookieDomain":".iwara.tv"});ga("set", "anonymizeIp", true);ga("send", "pageview");
|
||||||
|
//--><!]]>
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/views_load_more/views_load_more.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/modules/contrib/views/js/ajax_view.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/js/bootstrap.min.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/js/flat-ui.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/js/js.cookie.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/js/jquery.truncate.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/video-js/video.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/videojs.hotkeys.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/videojs.persistvolume.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/videojs-loopbutton/videojs.loopbutton.min.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/videojs-resolution-switcher/videojs-resolution-switcher.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/slick/slick.min.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/writeCapture.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/lib/jquery.writeCapture.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/sites/all/themes/main/js/main.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--//--><![CDATA[//><!--
|
||||||
|
jQuery.extend(Drupal.settings, {"basePath":"\/","pathPrefix":"","ajaxPageState":{"theme":"main","theme_token":"rbkG9UcbZ-jrWv01QHFcevqE_zrYWCoZ0Y7672kB-zk","jquery_version":"1.10","js":{"sites\/all\/modules\/custom\/extra_content\/extra_content.js":1,"modules\/statistics\/statistics.js":1,"0":1,"\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.10.2\/jquery.min.js":1,"1":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/external\/jquery.cookie.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/misc\/jquery.form.min.js":1,"misc\/ajax.js":1,"sites\/all\/modules\/contrib\/jquery_update\/js\/jquery_update.js":1,"sites\/all\/modules\/custom\/user_management\/user_management.js":1,"public:\/\/languages\/ja_InHMwhlJnpgeRQNauiTX5Z8i27Ho8-JuYjQwQykOyag.js":1,"sites\/all\/modules\/contrib\/video\/js\/video.js":1,"sites\/all\/modules\/contrib\/views\/js\/base.js":1,"misc\/progress.js":1,"sites\/all\/modules\/contrib\/google_analytics\/googleanalytics.js":1,"2":1,"sites\/all\/modules\/contrib\/views_load_more\/views_load_more.js":1,"sites\/all\/modules\/contrib\/views\/js\/ajax_view.js":1,"sites\/all\/themes\/main\/js\/bootstrap.min.js":1,"sites\/all\/themes\/main\/js\/flat-ui.js":1,"sites\/all\/themes\/main\/js\/js.cookie.js":1,"sites\/all\/themes\/main\/js\/jquery.truncate.js":1,"sites\/all\/themes\/main\/lib\/video-js\/video.js":1,"sites\/all\/themes\/main\/lib\/videojs.hotkeys.js":1,"sites\/all\/themes\/main\/lib\/videojs.persistvolume.js":1,"sites\/all\/themes\/main\/lib\/videojs-loopbutton\/videojs.loopbutton.min.js":1,"sites\/all\/themes\/main\/lib\/videojs-resolution-switcher\/videojs-resolution-switcher.js":1,"sites\/all\/themes\/main\/lib\/slick\/slick.min.js":1,"sites\/all\/themes\/main\/lib\/writeCapture.js":1,"sites\/all\/themes\/main\/lib\/jquery.writeCapture.js":1,"sites\/all\/themes\/main\/js\/main.js":1},"css":{"modules\/system\/system.base.css":1,"modules\/system\/system.menus.css":1,"modules\/system\/system.messages.css":1,"modules\/system\/system.theme.css":1,"modules\/comment\/comment.css":1,"modules\/field\/theme\/field.css":1,"modules\/node\/node.css":1,"modules\/user\/user.css":1,"modules\/forum\/forum.css":1,"sites\/all\/modules\/contrib\/views\/css\/views.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/contrib\/video\/css\/video.css":1,"modules\/locale\/locale.css":1,"sites\/all\/themes\/main\/css\/main.css":1,"sites\/all\/themes\/main\/lib\/video-js\/video-js.min.css":1,"sites\/all\/themes\/main\/lib\/videojs-loopbutton\/videojs.loopbutton.css":1,"sites\/all\/themes\/main\/lib\/videojs-resolution-switcher\/videojs-resolution-switcher.css":1,"sites\/all\/themes\/main\/lib\/slick\/slick.css":1,"sites\/all\/themes\/main\/lib\/slick\/slick-theme.css":1}},"views":{"ajax_path":"\/views\/ajax","ajaxViews":{"views_dom_id:3db0f7819590f4cdd92bcf970946e86c":{"view_name":"likes","view_display_id":"block","view_args":"67589","view_path":"node\/67589","view_base_path":null,"view_dom_id":"3db0f7819590f4cdd92bcf970946e86c","pager_element":"1"},"views_dom_id:299ba1e6aebe291ab75faaba85866eb4":{"view_name":"likes","view_display_id":"block","view_args":"67589","view_path":"node\/67589","view_base_path":null,"view_dom_id":"299ba1e6aebe291ab75faaba85866eb4","pager_element":"1"}}},"urlIsAjaxTrusted":{"\/views\/ajax":true},"googleanalytics":{"trackOutbound":1,"trackMailto":1,"trackDomainMode":1},"theme":{"nid":67589},"statistics":{"data":{"nid":"67589"},"url":"\/modules\/statistics\/statistics.php"}});
|
||||||
|
//--><!]]>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.extra-content-block {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.extra-content-block img {
|
||||||
|
top: 0 !important;
|
||||||
|
left: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.page-node-254112 {
|
||||||
|
background-image: url('/sites/all/themes/main/img/great-thread.gif');
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="html not-front not-logged-in no-sidebars page-node page-node- page-node-67589 node-type-image i18n-ja" >
|
||||||
|
|
||||||
|
|
||||||
|
<div id="wrapper">
|
||||||
|
<header>
|
||||||
|
<div class="menu-bar">
|
||||||
|
<div class="container">
|
||||||
|
<div>
|
||||||
|
<a href="/" class="pull-left logo">
|
||||||
|
<img src="/sites/all/themes/main/img/logo.png" />
|
||||||
|
<span class="site-name visible-xs">Iwara</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" id="hamburger-toggle" class="pull-right visible-xs"><i class="glyphicon glyphicon-list"></i></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="top-menu hidden-xs">
|
||||||
|
<div class="region region-header">
|
||||||
|
<div id="block-system-main-menu" class="block block-system block-menu">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<ul class="menu nav nav-pills pull-left"><li title=""><a href="/" title="">Home</a></li>
|
||||||
|
<li class="leaf"><a href="/videos">動画</a></li>
|
||||||
|
<li class="active active"><a href="/images" class="active-trail active">画像</a></li>
|
||||||
|
<li title=""><a href="/forum" title="">フォーラム</a></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- User -->
|
||||||
|
<div id="user-links" class="pull-right">
|
||||||
|
<a href="/search" class="search-link"><span class="fui-search"></span></a>
|
||||||
|
<a href="/user/login?destination=node/67589" class="btn btn-sm btn-primary" title="Log in to your account">ログイン</a>
|
||||||
|
<a href="/user/register" class="btn btn-sm btn-success" title="Create a new account">Join</a>
|
||||||
|
|
||||||
|
<a href="/section/ecchi?destination=node/67589" class="btn btn-sm btn-danger section-btn"><span class="glyphicon glyphicon-heart"></span> Ecchi</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section id="content">
|
||||||
|
|
||||||
|
<div class="container" style="position: relative">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="region region-before-content">
|
||||||
|
<div id="block-extra-content-extra-content-block-1" class="block block-extra-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="extra-content-block" data-type="wide" data-bid="1"></div> </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="region region-content">
|
||||||
|
<div id="block-system-main" class="block block-system">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div id="node-67589" class="node node-image node-full clearfix col-sm-9">
|
||||||
|
<div class="content">
|
||||||
|
<div class="field field-name-field-images field-type-file field-label-hidden"><div class="field-items"><div class="field-item even"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_a.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_a.png?itok=seN2Lu5g" width="940" height="480" alt="" /></a></div><div class="field-item odd"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_b.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_b.png?itok=5a29f-Vr" width="940" height="480" alt="" /></a></div><div class="field-item even"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_c.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_c.png?itok=9WCbVgGu" width="940" height="480" alt="" /></a></div><div class="field-item odd"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_d.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_d.png?itok=03bH-wAL" width="940" height="480" alt="" /></a></div><div class="field-item even"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_e.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_e.png?itok=2tbuVk1X" width="940" height="480" alt="" /></a></div><div class="field-item odd"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_f.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_f.png?itok=4XwfTgFV" width="940" height="480" alt="" /></a></div><div class="field-item even"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_g.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_g.png?itok=CXsigpLq" width="940" height="480" alt="" /></a></div><div class="field-item odd"><a href="//i.iwara.tv/sites/default/files/photos/jing_yin_rin18sui_h.png" target="_blank"><img src="//i.iwara.tv/sites/default/files/styles/large/public/photos/jing_yin_rin18sui_h.png?itok=h14hWTK6" width="940" height="480" alt="" /></a></div></div></div>
|
||||||
|
<div class="node-info">
|
||||||
|
<div class="submitted">
|
||||||
|
<span class="hidden-xs">
|
||||||
|
<div class="user-picture">
|
||||||
|
<a href="/users/tonjiru-lion" title="ユーザープロフィールの表示"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/avatars/7177.jpg?itok=M_gYMGc0" width="70" height="70" alt="ユーザー Tonjiru Lion の写真" title="ユーザー Tonjiru Lion の写真" /></a> </div>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<h1 class="title">鏡音りん18歳</h1>
|
||||||
|
作成者:<a href="/users/tonjiru-lion" title="ユーザープロフィールの表示" class="username">Tonjiru Lion</a> 作成日:2016-05-28 21:04 </div>
|
||||||
|
|
||||||
|
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>今回はあんまエロくないです。</p>
|
||||||
|
</div></div></div> <div class="field field-name-field-image-categories field-type-taxonomy-term-reference field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/images?f%5B0%5D=field_image_categories%3A5">Vocaloid</a></div></div></div> <div class="node-views"><i class="glyphicon glyphicon-eye-open"></i> 12,542</div>
|
||||||
|
<div class="share-icons">
|
||||||
|
|
||||||
|
<a class="symbol" target="_blank" href="http://twitter.com/home?status=%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3+https%3A%2F%2Fiwara.tv%2Fimages%2F%25E9%258F%25A1%25E9%259F%25B3%25E3%2582%258A%25E3%2582%259318%25E6%25AD%25B3" title="Share on Twitter"></a>
|
||||||
|
<a class="symbol" target="_blank" href="http://www.facebook.com/share.php?u=https%3A%2F%2Fiwara.tv%2Fimages%2F%25E9%258F%25A1%25E9%259F%25B3%25E3%2582%258A%25E3%2582%259318%25E6%25AD%25B3&title=%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3" title="Share on Facebook"></a>
|
||||||
|
<a class="symbol" target="_blank" href="https://plus.google.com/share?url=https%3A%2F%2Fiwara.tv%2Fimages%2F%25E9%258F%25A1%25E9%259F%25B3%25E3%2582%258A%25E3%2582%259318%25E6%25AD%25B3" title="Share on Google+"></a>
|
||||||
|
<a class="symbol" target="_blank" href="http://www.reddit.com/submit?url=https%3A%2F%2Fiwara.tv%2Fimages%2F%25E9%258F%25A1%25E9%259F%25B3%25E3%2582%258A%25E3%2582%259318%25E6%25AD%25B3&title=%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3" title="Share on Reddit"></a>
|
||||||
|
<a class="symbol" target="_blank" href="http://www.stumbleupon.com/submit?url=https%3A%2F%2Fiwara.tv%2Fimages%2F%25E9%258F%25A1%25E9%259F%25B3%25E3%2582%258A%25E3%2582%259318%25E6%25AD%25B3&title=%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3" title="Share on StumbleUpon"></a>
|
||||||
|
</div> </div>
|
||||||
|
|
||||||
|
<div class="node-buttons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<div id="comments" class="comment-wrapper has-comments">
|
||||||
|
<h2 class="title">
|
||||||
|
コメント数 6 </h2>
|
||||||
|
|
||||||
|
<a id="comment-37719"></a>
|
||||||
|
<div class="comment clearfix">
|
||||||
|
<div class="col-sm-2 user-avatar hidden-xs">
|
||||||
|
<div class="user-picture">
|
||||||
|
<a href="/users/makimaki" title="ユーザープロフィールの表示"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/pictures/picture-10965-1518366600.png?itok=ZMDNhxs8" width="70" height="70" alt="ユーザー MakiMaki の写真" title="ユーザー MakiMaki の写真" /></a> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="submitted">
|
||||||
|
作成者:<a href="/users/makimaki" title="ユーザープロフィールの表示" class="username">MakiMaki</a> 作成日:2016-05-29 19:40 </div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="field field-name-comment-body field-type-text-long field-label-hidden"><div class="field-items"><div class="field-item even"><p>良いカスタムモデルですね<br />
|
||||||
|
ぶっちゃけ裸よりエロいです(*´ω`)</p>
|
||||||
|
</div></div></div> </div>
|
||||||
|
|
||||||
|
<ul class="links inline"><li class="comment_forbidden first last"><span>コメントを投稿するには<a href="/user/login?destination=node/67589%23comment-form">ログイン</a>または<a href="/user/register?destination=node/67589%23comment-form">ユーザー登録</a>を行ってください</span></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
<a id="comment-42253"></a>
|
||||||
|
<div class="comment clearfix">
|
||||||
|
<div class="col-sm-2 user-avatar hidden-xs">
|
||||||
|
<div class="user-picture">
|
||||||
|
<a href="/users/%E3%83%A0%E3%83%AA%E3%83%A0%E3%83%AA%E3%83%A0%E3%83%AA" title="ユーザープロフィールの表示"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/pictures/picture-42946-1471620521.jpg?itok=jh7viI8A" width="70" height="70" alt="ユーザー ムリムリムリ の写真" title="ユーザー ムリムリムリ の写真" /></a> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="submitted">
|
||||||
|
作成者:<a href="/users/%E3%83%A0%E3%83%AA%E3%83%A0%E3%83%AA%E3%83%A0%E3%83%AA" title="ユーザープロフィールの表示" class="username">ムリムリムリ</a> 作成日:2016-06-13 01:42 </div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="field field-name-comment-body field-type-text-long field-label-hidden"><div class="field-items"><div class="field-item even"><p>可愛いと思います!</p>
|
||||||
|
</div></div></div> </div>
|
||||||
|
|
||||||
|
<ul class="links inline"><li class="comment_forbidden first last"><span>コメントを投稿するには<a href="/user/login?destination=node/67589%23comment-form">ログイン</a>または<a href="/user/register?destination=node/67589%23comment-form">ユーザー登録</a>を行ってください</span></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
<a id="comment-56348"></a>
|
||||||
|
<div class="comment clearfix">
|
||||||
|
<div class="col-sm-2 user-avatar hidden-xs">
|
||||||
|
<div class="user-picture">
|
||||||
|
<a href="/users/g3-3p" title="ユーザープロフィールの表示"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/default-avatar.png?itok=ZB6hu7xh" width="70" height="70" alt="ユーザー g3-3p の写真" title="ユーザー g3-3p の写真" /></a> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="submitted">
|
||||||
|
作成者:<a href="/users/g3-3p" title="ユーザープロフィールの表示" class="username">g3-3p</a> 作成日:2016-07-16 19:32 </div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="field field-name-comment-body field-type-text-long field-label-hidden"><div class="field-items"><div class="field-item even"><p>これくらいの微エロも捗りますね</p>
|
||||||
|
</div></div></div> </div>
|
||||||
|
|
||||||
|
<ul class="links inline"><li class="comment_forbidden first last"><span>コメントを投稿するには<a href="/user/login?destination=node/67589%23comment-form">ログイン</a>または<a href="/user/register?destination=node/67589%23comment-form">ユーザー登録</a>を行ってください</span></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
<a id="comment-73682"></a>
|
||||||
|
<div class="comment clearfix">
|
||||||
|
<div class="col-sm-2 user-avatar hidden-xs">
|
||||||
|
<div class="user-picture">
|
||||||
|
<a href="/users/%E5%A4%8F%E7%82%89%E5%86%AC%E6%89%87" title="ユーザープロフィールの表示"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/default-avatar.png?itok=ZB6hu7xh" width="70" height="70" alt="ユーザー 夏炉冬扇 の写真" title="ユーザー 夏炉冬扇 の写真" /></a> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="submitted">
|
||||||
|
作成者:<a href="/users/%E5%A4%8F%E7%82%89%E5%86%AC%E6%89%87" title="ユーザープロフィールの表示" class="username">夏炉冬扇</a> 作成日:2016-08-23 13:58 </div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="field field-name-comment-body field-type-text-long field-label-hidden"><div class="field-items"><div class="field-item even"><p>これはけしからん18歳</p>
|
||||||
|
</div></div></div> </div>
|
||||||
|
|
||||||
|
<ul class="links inline"><li class="comment_forbidden first last"><span>コメントを投稿するには<a href="/user/login?destination=node/67589%23comment-form">ログイン</a>または<a href="/user/register?destination=node/67589%23comment-form">ユーザー登録</a>を行ってください</span></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
<a id="comment-112401"></a>
|
||||||
|
<div class="comment clearfix">
|
||||||
|
<div class="col-sm-2 user-avatar hidden-xs">
|
||||||
|
<div class="user-picture">
|
||||||
|
<a href="/users/calinanon" title="ユーザープロフィールの表示"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/default-avatar.png?itok=ZB6hu7xh" width="70" height="70" alt="ユーザー UnknownAnon の写真" title="ユーザー UnknownAnon の写真" /></a> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="submitted">
|
||||||
|
作成者:<a href="/users/calinanon" title="ユーザープロフィールの表示" class="username">UnknownAnon</a> 作成日:2016-11-19 23:38 </div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="field field-name-comment-body field-type-text-long field-label-hidden"><div class="field-items"><div class="field-item even"><p>That is Nice!</p>
|
||||||
|
</div></div></div> </div>
|
||||||
|
|
||||||
|
<ul class="links inline"><li class="comment_forbidden first last"><span>コメントを投稿するには<a href="/user/login?destination=node/67589%23comment-form">ログイン</a>または<a href="/user/register?destination=node/67589%23comment-form">ユーザー登録</a>を行ってください</span></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
<a id="comment-469660"></a>
|
||||||
|
<div class="comment clearfix">
|
||||||
|
<div class="col-sm-2 user-avatar hidden-xs">
|
||||||
|
<div class="user-picture">
|
||||||
|
<a href="/users/velveltia" title="ユーザープロフィールの表示"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/pictures/picture-284975-1526661952.jpg?itok=r07_SvI2" width="70" height="70" alt="ユーザー velveltia の写真" title="ユーザー velveltia の写真" /></a> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="submitted">
|
||||||
|
作成者:<a href="/users/velveltia" title="ユーザープロフィールの表示" class="username">velveltia</a> 作成日:2018-10-13 11:35 </div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="field field-name-comment-body field-type-text-long field-label-hidden"><div class="field-items"><div class="field-item even"><p>Lovely! I wanna make her videos!! plz</p>
|
||||||
|
</div></div></div> </div>
|
||||||
|
|
||||||
|
<ul class="links inline"><li class="comment_forbidden first last"><span>コメントを投稿するには<a href="/user/login?destination=node/67589%23comment-form">ログイン</a>または<a href="/user/register?destination=node/67589%23comment-form">ユーザー登録</a>を行ってください</span></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-3 sidebar">
|
||||||
|
<div id="block-extra-content-extra-content-block-3" class="block block-extra-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="extra-content-block" data-type="tall" data-bid="3"></div> </div>
|
||||||
|
</div>
|
||||||
|
<div id="block-views-likes-block" class="block block-views">
|
||||||
|
|
||||||
|
<h2>Liked by</h2>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="view view-likes view-id-likes view-display-id-block view-dom-id-299ba1e6aebe291ab75faaba85866eb4">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="view-content">
|
||||||
|
<div class="views-row views-row-1 views-row-odd views-row-first">
|
||||||
|
|
||||||
|
<div class="views-field views-field-picture"> <div class="field-content"><a href="/users/icarus3901"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/pictures/picture-99167-1479188321_0.jpg?itok=5jMmxEGl" width="70" height="70" alt="ユーザー icarus3901 の写真" /></a></div> </div>
|
||||||
|
<div class="views-field views-field-name"> <span class="field-content"><a href="/users/icarus3901" title="ユーザープロフィールの表示" class="username">icarus3901</a></span> </div>
|
||||||
|
<div class="views-field views-field-timestamp"> <span class="field-content"><em class="placeholder">4日</em>前</span> </div> </div>
|
||||||
|
<div class="views-row views-row-2 views-row-even">
|
||||||
|
|
||||||
|
<div class="views-field views-field-picture"> <div class="field-content"><a href="/users/13921944947"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/default-avatar.png?itok=ZB6hu7xh" width="70" height="70" alt="ユーザー 13921944947 の写真" /></a></div> </div>
|
||||||
|
<div class="views-field views-field-name"> <span class="field-content"><a href="/users/13921944947" title="ユーザープロフィールの表示" class="username">13921944947</a></span> </div>
|
||||||
|
<div class="views-field views-field-timestamp"> <span class="field-content"><em class="placeholder">3週</em>前</span> </div> </div>
|
||||||
|
<div class="views-row views-row-3 views-row-odd">
|
||||||
|
|
||||||
|
<div class="views-field views-field-picture"> <div class="field-content"><a href="/users/%E6%B0%B8%E8%BF%9C%E7%9A%84yc"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/default-avatar.png?itok=ZB6hu7xh" width="70" height="70" alt="ユーザー 永远的YC の写真" /></a></div> </div>
|
||||||
|
<div class="views-field views-field-name"> <span class="field-content"><a href="/users/%E6%B0%B8%E8%BF%9C%E7%9A%84yc" title="ユーザープロフィールの表示" class="username">永远的YC</a></span> </div>
|
||||||
|
<div class="views-field views-field-timestamp"> <span class="field-content"><em class="placeholder">1ヶ月</em>前</span> </div> </div>
|
||||||
|
<div class="views-row views-row-4 views-row-even">
|
||||||
|
|
||||||
|
<div class="views-field views-field-picture"> <div class="field-content"><a href="/users/misakasang"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/default-avatar.png?itok=ZB6hu7xh" width="70" height="70" alt="ユーザー MisakaSang の写真" /></a></div> </div>
|
||||||
|
<div class="views-field views-field-name"> <span class="field-content"><a href="/users/misakasang" title="ユーザープロフィールの表示" class="username">MisakaSang</a></span> </div>
|
||||||
|
<div class="views-field views-field-timestamp"> <span class="field-content"><em class="placeholder">1ヶ月</em>前</span> </div> </div>
|
||||||
|
<div class="views-row views-row-5 views-row-odd">
|
||||||
|
|
||||||
|
<div class="views-field views-field-picture"> <div class="field-content"><a href="/users/tsk-ij04n"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/default-avatar.png?itok=ZB6hu7xh" width="70" height="70" alt="ユーザー TSK-ij04n の写真" /></a></div> </div>
|
||||||
|
<div class="views-field views-field-name"> <span class="field-content"><a href="/users/tsk-ij04n" title="ユーザープロフィールの表示" class="username">TSK-ij04n</a></span> </div>
|
||||||
|
<div class="views-field views-field-timestamp"> <span class="field-content"><em class="placeholder">7ヶ月</em>前</span> </div> </div>
|
||||||
|
<div class="views-row views-row-6 views-row-even views-row-last">
|
||||||
|
|
||||||
|
<div class="views-field views-field-picture"> <div class="field-content"><a href="/users/ramaro"><img src="//i.iwara.tv/sites/default/files/styles/avatar_small/public/pictures/picture-8092-1531758452.png?itok=7CW_KraP" width="70" height="70" alt="ユーザー ramaro の写真" /></a></div> </div>
|
||||||
|
<div class="views-field views-field-name"> <span class="field-content"><a href="/users/ramaro" title="ユーザープロフィールの表示" class="username">ramaro</a></span> </div>
|
||||||
|
<div class="views-field views-field-timestamp"> <span class="field-content"><em class="placeholder">9ヶ月</em>前</span> </div> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-list"><ul class="pager pager-load-more"><li class="pager-next first last"><a href="/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3?page=0%2C1">Show more</a></li>
|
||||||
|
</ul></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> </div>
|
||||||
|
</div>
|
||||||
|
<div id="block-views-search-block-1" class="block block-views">
|
||||||
|
|
||||||
|
<h2>More like this</h2>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="view view-search view-id-search view-display-id-block_1 view-dom-id-bb0dec2f11c5548a0e00114d44c58673">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="view-content">
|
||||||
|
<div class="views-responsive-grid views-responsive-grid-horizontal views-columns-2">
|
||||||
|
<div class="views-row row views-row-1 views-row-first">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-26903" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="阿武隈">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 35</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26903"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/144000862061222f.png?itok=9a8JSlmy" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-26913" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="大鳥居">
|
||||||
|
<div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26913"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/1440844307f07d19.jpg?itok=9IqFIae0" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-row row views-row-2">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-26914" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="てつのくじら館">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 4</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26914"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/14408444339cf8ce.jpg?itok=w_ACmY4t" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-26915" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="潜水艦あきしおの発令所">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 1</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26915"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/1440844725c1f47b.jpg?itok=GAV4jF-U" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-row row views-row-3">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-26916" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="潜水艦あきしおの魚雷発射所">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 2</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26916"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/14408449874d49d7.jpg?itok=j-9Jygsi" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-26917" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="潜水艦あきしおの潜望鏡">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 1</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26917"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/14408450891e04bf.jpg?itok=VJ79mzh_" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-row row views-row-4">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-26918" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="戦艦 陸奥の主錨">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 2</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26918"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/1440845323998c3f.jpg?itok=sGyJF6jt" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-26919" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="戦艦 陸奥の主砲">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 2</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26919"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/144084542421cdc9.jpg?itok=eTVTfKA_" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-row row views-row-5">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-26920" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="戦艦 陸奥のスクリュー">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 3</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26920"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/1440845506461ad3.jpg?itok=Gl3zL796" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-26921" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="戦艦 大和の巨大模型">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 3</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26921"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/1440845867beed12.jpg?itok=TLjrsw5W" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-row row views-row-6">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-26922" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="戦艦 長門の軍艦旗">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 7</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26922"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/144084593641bb06.jpg?itok=_vd6homo" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-26923" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="零式艦上戦闘機">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 4</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26923"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/14408461449d9411.jpg?itok=xdyThTxi" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-row row views-row-7">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-26924" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="砲弾">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 4</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26924"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/14408463334e7eb6.jpg?itok=j9lzqoeN" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-26925" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="戦艦 大和の巨大模型2">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 3</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/26925"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/1440846468344aa6.jpg?itok=EcogP7eH" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-row row views-row-8 views-row-last">
|
||||||
|
<div class="views-column col-sm-6 views-column-1 views-column-first">
|
||||||
|
<div id="node-27079" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="護衛艦 いせ">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 1</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/27079"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/144283604013e383.jpg?itok=IoWmSlTe" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="views-column col-sm-6 views-column-2 views-column-last">
|
||||||
|
<div id="node-27080" class="node node-image node-sidebar_teaser clearfix" data-toggle="tooltip" data-placement="top" title="護衛艦 せんだい">
|
||||||
|
<div>
|
||||||
|
<div class="icon-bg">
|
||||||
|
|
||||||
|
<div class="right-icon likes-icon"><i class="glyphicon glyphicon-heart"></i> 3</div>
|
||||||
|
</div>
|
||||||
|
<div class="field field-name-field-thumbnail field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><a href="/node/27080"><img src="//i.iwara.tv/sites/default/files/styles/sidebar_preview/public/photos/imported/1442836502a92b44.jpg?itok=Zm9MUseh" width="141" height="84" /></a></div></div></div> </div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
<div class="region region-footer">
|
||||||
|
<div id="block-locale-language" class="block block-locale">
|
||||||
|
|
||||||
|
<h2>言語</h2>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<ul class="language-switcher-locale-session"><li class="en first active"><a href="/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3?language=en" class="language-link active" xml:lang="en">English</a></li>
|
||||||
|
<li class="ja active"><a href="/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3" class="language-link session-active active" xml:lang="ja">日本語</a></li>
|
||||||
|
<li class="zh-hans active"><a href="/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3?language=zh-hans" class="language-link active" xml:lang="zh-hans">简体中文</a></li>
|
||||||
|
<li class="de last active"><a href="/images/%E9%8F%A1%E9%9F%B3%E3%82%8A%E3%82%9318%E6%AD%B3?language=de" class="language-link active" xml:lang="de">Deutsch</a></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
<div id="block-menu-menu-footer" class="block block-menu">
|
||||||
|
|
||||||
|
<h2>リンク</h2>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<ul class="menu nav nav-pills pull-left"><li title="For contacting us"><a href="//www.iwara.tv/contact" title="For contacting us">Contact Us</a></li>
|
||||||
|
<li title=""><a href="https://discord.gg/V62x3tm" title="">Discord</a></li>
|
||||||
|
<li class="leaf"><a href="/playlists">Playlists</a></li>
|
||||||
|
<li title=""><a href="//ecchi.iwara.tv/forums/important-website-rules-and-conduct" title="">Rules</a></li>
|
||||||
|
<li title=""><a href="/users" title="">Users</a></li>
|
||||||
|
</ul> </div>
|
||||||
|
</div>
|
||||||
|
<div id="block-forum-new" class="block block-forum">
|
||||||
|
|
||||||
|
<h2>新しいフォーラムトピック</h2>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="item-list"><ul><li class="first"><a href="/forums/help-please-where-can-i-find-video">help please. where can I find this video?</a></li>
|
||||||
|
<li><a href="/forums/looking-mmd-r18-discord">looking for mmd r18 discord </a></li>
|
||||||
|
<li><a href="/forums/looking-male-chastity-model">Looking for a male chastity model</a></li>
|
||||||
|
<li><a href="/forums/spanish-forum-link-or-help" title="コメント数 2">spanish forum link or help</a></li>
|
||||||
|
<li class="last"><a href="/forums/how-fix-problem-motion" title="コメント数 2">How to fix this problem with a motion?</a></li>
|
||||||
|
</ul></div><div class="more-link"><a href="/forum" title="最新のフォーラムトピックを読む">続き</a></div> </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="copyright">© Iwara 2019</div>
|
||||||
|
</div>
|
||||||
|
</footer> <script type="text/javascript" src="https://iwara.tv/sites/all/modules/custom/extra_content/extra_content.js?pv5bfq"></script>
|
||||||
|
<script type="text/javascript" src="https://iwara.tv/modules/statistics/statistics.js?pv5bfq"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
1711
tests/fixture/Iwara/video.html
vendored
Normal file
1711
tests/fixture/Iwara/video.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1013
tests/fixture/Iwara/youtube.html
vendored
Normal file
1013
tests/fixture/Iwara/youtube.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
205
tests/fixture/Kb10uyShortStoryServer/tomone.html
vendored
Normal file
205
tests/fixture/Kb10uyShortStoryServer/tomone.html
vendored
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ja">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="csrf-token" content="MVlIWAqKUOV500GwG5vpc4AR2tdJA0KMPQVkqBVd">
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
|
||||||
|
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf"
|
||||||
|
crossorigin="anonymous">
|
||||||
|
<link rel="icon" href="/favicon.ico">
|
||||||
|
<link rel="stylesheet" href="/styles/app.d45d104d9486642a2e8e.css">
|
||||||
|
<script defer src="/scripts/show-post.d45d104d9486642a2e8e.js"></script>
|
||||||
|
<link rel="stylesheet" href="/styles/show-post.d45d104d9486642a2e8e.css" media="all">
|
||||||
|
<title>朋音「は、はぁ?おむつ?」 - ShortStoryServer</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<nav class="navbar">
|
||||||
|
<a class="logo" href="/">
|
||||||
|
<img src="/images/newlogo.png" alt="kbS3">
|
||||||
|
<span class="title">ShortStoryServer</span>
|
||||||
|
</span>
|
||||||
|
<div class="menu">
|
||||||
|
<a class="item" data-dropdown="list-dropdown">一覧</a>
|
||||||
|
<div id="list-dropdown" class="dropdown" data-dropdown-merge>
|
||||||
|
<a class="item" href="https://ss.kb10uy.org/posts/latest">最近の作品</a>
|
||||||
|
<a class="item" href="https://ss.kb10uy.org/series/latest">最近のシリーズ</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="https://ss.kb10uy.org/search" class="item">検索</a>
|
||||||
|
|
||||||
|
<a class="item" data-dropdown="help-dropdown">ヘルプ</a>
|
||||||
|
<div id="help-dropdown" class="dropdown" data-dropdown-merge>
|
||||||
|
<a href="https://ss.kb10uy.org/help/playground" class="item">Playground</a>
|
||||||
|
<a href="https://ss.kb10uy.org/help/about" class="item">ShortStoryServer について</a>
|
||||||
|
<a href="https://ss.kb10uy.org/help/terms" class="item">規約</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="user" data-dropdown="user-dropdown">
|
||||||
|
<span>ログインしていません</span>
|
||||||
|
<span class="dropdown-caret"></span>
|
||||||
|
|
||||||
|
<!-- メニュー -->
|
||||||
|
<div id="user-dropdown" class="dropdown">
|
||||||
|
<div class="info">
|
||||||
|
ログインして様々な機能を活用しましょう
|
||||||
|
</div>
|
||||||
|
<div class="separator"></div>
|
||||||
|
<a href="https://ss.kb10uy.org/login" class="item">ログイン</a>
|
||||||
|
<a href="https://ss.kb10uy.org/register" class="item">サインアップ</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="post-info" id="app">
|
||||||
|
<h1>朋音「は、はぁ?おむつ?」</h1>
|
||||||
|
<div class="user">
|
||||||
|
<img src="https://www.gravatar.com/avatar/4bcb8dbb4c04894bafdc4b54c557d9ef?s=256&d=retro" alt="kb10uy">
|
||||||
|
<div>
|
||||||
|
Author:<br>
|
||||||
|
<a href="https://ss.kb10uy.org/users/kb10uy">kb10uy <small>@kb10uy</small></a>
|
||||||
|
</div>
|
||||||
|
<details>
|
||||||
|
<summary>メニュー</summary>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
|
<p class="summary">
|
||||||
|
自炊したおかずってやつです。とりあえずこのSSの中ではkb10uyの彼女は朋音ってことにしといてください。そうじゃないと出す男が決定できないので。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="tags">
|
||||||
|
<li class="tag"><a href="https://ss.kb10uy.org/search?query=%E5%A6%84%E6%83%B3&type=tag">妄想</a></li>
|
||||||
|
<li class="tag"><a href="https://ss.kb10uy.org/search?query=R-18&type=tag">R-18</a></li>
|
||||||
|
<li class="tag"><a href="https://ss.kb10uy.org/search?query=kb10uy&type=tag">kb10uy</a></li>
|
||||||
|
<li class="tag"><a href="https://ss.kb10uy.org/search?query=%E5%B2%A9%E6%B0%B8%E6%9C%8B%E9%9F%B3&type=tag">岩永朋音</a></li>
|
||||||
|
<li class="tag"><a href="https://ss.kb10uy.org/search?query=%E3%81%8A%E3%82%80%E3%81%A4&type=tag">おむつ</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="social">
|
||||||
|
<a href="javascript:(()=>{window.open(`https://shikorism.net/checkin?link=${encodeURIComponent(location.href)}`)})()" class="tissue share-button">
|
||||||
|
<svg class="logo" version="1.1" viewBox="3 3 10.933333 10.933333">
|
||||||
|
<rect ry="0.61077178" y="8.3200169" x="3.8013506" height="3.7688808" width="9.5094738" style="fill:transparent;stroke:#ffffff;stroke-width:0.79374999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path d="M 5.6372669,8.3056228 5.0631111,4.511235 C 5.33543,6.0470597 6.850946,6.7810892 8.7216603,5.6856858 9.0176595,6.3067847 10.083255,7.5490113 12.072359,6.2277467 l -0.472834,2.0778761 z" style="fill:#ffffff;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.77704424;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path d="M 3.7504177,10.87423 H 13.589607" style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</svg>
|
||||||
|
<span>チェックイン</span>
|
||||||
|
</a>
|
||||||
|
<a href="https://mastoshare.net/post.php?text=%E6%9C%8B%E9%9F%B3%E3%80%8C%E3%81%AF%E3%80%81%E3%81%AF%E3%81%81%EF%BC%9F%E3%81%8A%E3%82%80%E3%81%A4%EF%BC%9F%E3%80%8D+-+ShortStoryServer" class="mastodon share-button" onclick="window.open(this.href, '', 'width=500,height=400'); return false;">
|
||||||
|
<i class="fab fa-mastodon"></i>
|
||||||
|
<span>トゥート</span>
|
||||||
|
</a>
|
||||||
|
<a href="https://twitter.com/intent/tweet?text=%E6%9C%8B%E9%9F%B3%E3%80%8C%E3%81%AF%E3%80%81%E3%81%AF%E3%81%81%EF%BC%9F%E3%81%8A%E3%82%80%E3%81%A4%EF%BC%9F%E3%80%8D+-+ShortStoryServer&url=https%3A%2F%2Fss.kb10uy.org%2Fposts%2F14" class="twitter share-button" onclick="window.open(this.href, '', 'width=500,height=400'); return false;">
|
||||||
|
<i class="fab fa-twitter"></i>
|
||||||
|
<span>ツイート</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<modal-dialog v-cloak button-type="ok-cancel" v-if="shown.series" @dialog-ok="addToSeries(14)" @dialog-closed="shown.series = false">
|
||||||
|
<template v-slot:label>シリーズに追加</template>
|
||||||
|
<p>
|
||||||
|
作品をシリーズに追加すると、シリーズのページからもこの作品にアクセスできるようになるほか、
|
||||||
|
登録されているシリーズが作品ページにも表示されます。
|
||||||
|
</p>
|
||||||
|
<form>
|
||||||
|
<div class="pair">
|
||||||
|
<label for="dialog-series">追加先</label>
|
||||||
|
<select id="dialog-series" name="series_target" v-model="selectedSeries">
|
||||||
|
<option v-for="seriesItem of series" :key="seriesItem.id" :value="seriesItem.id">{{ seriesItem.title }}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</modal-dialog>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@media (prefers-color-scheme: dark) {}</style>
|
||||||
|
<article class="post">
|
||||||
|
<p>
|
||||||
|
<span class="line male-1">kb10uy「うん、今日はこれ穿いて学校行って」</span>
|
||||||
|
<span class="line female-1">朋音「あの……アンタ本気で言ってるの?」</span>
|
||||||
|
<span class="line male-1">kb10uy「自分の好きでもない子にそんなおむつ穿いてとか言わないよ」</span>
|
||||||
|
<span class="line female-1">朋音「そういうことじゃないのよっ……」</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
kb10uy の要求はいたって単純である。
|
||||||
|
</p>
|
||||||
|
<ul class="">
|
||||||
|
<li class="">今日一日、おむつを穿いていること。 </li>
|
||||||
|
<li class="">必ずおむつの中に出すこと(大小問わず)。</li>
|
||||||
|
<li class="">必ず人のいる場所で出すこと。</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
単純か?
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span class="line female-1">朋音「いまアンタのカノジョになっちゃったことを心底後悔してるわ……」</span>
|
||||||
|
<span class="line male-1">kb10uy「でもやってくれるよね?」</span>
|
||||||
|
<span class="line female-1">朋音「うぅ……そうよ、やるわよ……正直、そ、その……やり、たい……し」</span>
|
||||||
|
<span class="line male-1">kb10uy「朋音ならそう言ってくれると思った!じゃあよろしくね」</span>
|
||||||
|
<span class="line female-1">朋音「何が宜しいのよ……まったく」</span>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<p>
|
||||||
|
<span class="line female-1">朋音「え、ちょっと待って、ワタシこれ大きいほうもこれにするの!?」</span>
|
||||||
|
<span class="line male-1">kb10uy「うん、言ったじゃん」</span>
|
||||||
|
<span class="line female-1">朋音「はぁ……」</span>
|
||||||
|
<span class="line male-1">kb10uy「嫌だったら我慢して帰ってきてからしてもいいから」</span>
|
||||||
|
<span class="line female-1">朋音「言われなくてもそうするわよ!w」</span>
|
||||||
|
<span class="line male-1">kb10uy「おしっこは我慢できなさそう?」</span>
|
||||||
|
<span class="line female-1">朋音「ん、正直自信ない……」</span>
|
||||||
|
<span class="line male-1">kb10uy「まあ大丈夫だって、きっとバレないよ」</span>
|
||||||
|
<span class="line female-1">朋音「よくもそんなヘラヘラと……」</span>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<p>
|
||||||
|
はぁ〜……。もうユウウツだわ……。
|
||||||
|
<span class="line female-2">夏稀「トモ、大丈夫?なんか妙に落ち込んでるように見えるけど……」</span>
|
||||||
|
<span class="line female-1">朋音「うーん……微妙」</span>
|
||||||
|
<span class="line female-2">夏稀「何かあった?」</span>
|
||||||
|
<span class="line female-1">朋音「あのさ……kb10uyいるじゃん」</span>
|
||||||
|
<span class="line female-2">夏稀「あぁ……1つ上の」</span>
|
||||||
|
<span class="line female-1">朋音「多分なつには言ってなかったと思うんだけどさ、ワタシちょっと前からあいつと付き合ってるんだわ」</span>
|
||||||
|
<span class="line female-2">夏稀「え、ほんとに!!良かったじゃん、おめでとう〜」</span>
|
||||||
|
<span class="line female-1">朋音「それがあんまりおめでたくなくてさ……」</span>
|
||||||
|
<span class="line female-2">夏稀「というと」</span>
|
||||||
|
<span class="line female-1">朋音「kb10uyって精力絶倫ってウワサじゃん」</span>
|
||||||
|
<span class="line female-2">夏稀「そうらしいね」</span>
|
||||||
|
<span class="line female-1">朋音「絶倫なだけならまだ良くてさ、ワタシもそういうことするんだろうなってのは覚悟してたし」</span>
|
||||||
|
<span class="line female-2">夏稀「したんだ?」</span>
|
||||||
|
<span class="line female-1">朋音「ん。プロポーズした日に……」</span>
|
||||||
|
<span class="line female-2">夏稀「マジで絶倫なんだ……」</span>
|
||||||
|
<span class="line female-1">朋音「いやこっからなのよ問題は。kb10uy、性癖もヤバヤバのヤバでさ」</span>
|
||||||
|
<span class="line female-2">夏稀「あー、はぁ……」</span>
|
||||||
|
<span class="line female-1">朋音「……誰にも言わない?」</span>
|
||||||
|
<span class="line female-2">夏稀「……うん。」</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span class="line female-1">朋音「ワタシ今おむつ穿かされてるの」</span>
|
||||||
|
<span class="line female-2">夏稀「<i class="">えっっ!!</i>」</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span class="line female-1">朋音「っ………///」</span>
|
||||||
|
<span class="line female-2">夏稀「なるほど……」</span>
|
||||||
|
<span class="line female-2">夏稀「でもトモも穿いてるってことはやっぱりムッツリだよね」</span>
|
||||||
|
<span class="line female-1">朋音「返す言葉もないわ……」</span>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<p>
|
||||||
|
実際に中に放尿するシーンはみなさんのご想像におまかせします
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
僕は廊下で人とぶつかってその衝撃でジョロロロって感じのシチュエーションで抜きました
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script src="/scripts/vendor.d45d104d9486642a2e8e.js"></script>
|
||||||
|
<script src="/scripts/app.d45d104d9486642a2e8e.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
88
tests/fixture/NicoSeiga/seiga.html
vendored
Normal file
88
tests/fixture/NicoSeiga/seiga.html
vendored
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="ja" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="Content-Script-Type" content="text/javascript">
|
||||||
|
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||||
|
<meta name="description" content="シャミ子が悪いんだよ・・・">
|
||||||
|
<meta name="copyright" content="© DWANGO Co., Ltd.">
|
||||||
|
<meta name="keywords" content="アニメ,まちカドまぞく,シャミ子,シャドウミストレス優子,吉田優子">
|
||||||
|
<meta name="google-site-verification" content="X1ARxKsFZK8gXr39X1KnF8tzHbcCj5lVZ-jQB0VwS-I" />
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:description" content="シャミ子が悪いんだよ・・・">
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<meta property="og:title" content="シャミ子 / まとけち さんのイラスト" />
|
||||||
|
<meta property="og:url" content="http://seiga.nicovideo.jp/seiga/im9623750" />
|
||||||
|
<meta property="og:description" content="シャミ子が悪いんだよ・・・" />
|
||||||
|
<meta property="og:site_name" content="ニコニコ静画 (イラスト)" />
|
||||||
|
<meta property="og:image" content="https://lohas.nicoseiga.jp/thumb/9623750i?1567848744" />
|
||||||
|
<title>シャミ子 / まとけち さんのイラスト - ニコニコ静画 (イラスト)</title>
|
||||||
|
<link rel="canonical" href="http://seiga.nicovideo.jp/seiga/im9623750" />
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/common/common_l.css?pzsf3v">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/illust/common.css?201401061430">
|
||||||
|
<link href="/css/login.css?201106241500" rel="stylesheet" type="text/css">
|
||||||
|
<link href="/css/illust.css?201104270015" rel="stylesheet" type="text/css">
|
||||||
|
<link href="/css/illust_list.css?201104270015" rel="stylesheet" type="text/css">
|
||||||
|
<link href="/css/ichiba_2.css?201511242239" rel="stylesheet" type="text/css">
|
||||||
|
<!--[if IE 7]>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/manga/ie7.css">
|
||||||
|
<![endif]-->
|
||||||
|
<script src="/js/common.min.js?q0xrj7" type="text/javascript"></script>
|
||||||
|
<script src="/js/illust/common.min.js?xjmqae" type="text/javascript"></script>
|
||||||
|
|
||||||
|
<body class="mode_2">
|
||||||
|
<!--↓メインコンテンツ-->
|
||||||
|
|
||||||
|
|
||||||
|
<div id="login_im_container">
|
||||||
|
<div id="login_im_left">
|
||||||
|
|
||||||
|
<!-- ▼Illust -->
|
||||||
|
<div id="login_im">
|
||||||
|
|
||||||
|
<div id="login_exp_area">
|
||||||
|
<img src="/img/login/title.png" alt="ログインすることで、フルサイズの画像を閲覧・コメントの投稿ができます。">
|
||||||
|
</div>
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" id="illust_area">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a id="link_thumbnail_main" href="/login/redirect?next_url=%2Fseiga%2Fim9623750">
|
||||||
|
<img src="https://lohas.nicoseiga.jp/thumb/9623750i?1567848744" alt="シャミ子">
|
||||||
|
</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="lg_ttl_illust"><h1>シャミ子</h1></div>
|
||||||
|
<div class="lg_txt_illust">投稿者:<strong>まとけち</strong> さん</div>
|
||||||
|
<div class="lg_txt_illust">シャミ子が悪いんだよ・・・</div>
|
||||||
|
|
||||||
|
<div class="lg_txt_date">2019年09月07日 18:17:19 投稿</div>
|
||||||
|
<div class="lg_txt_illust"><span class="bold">登録タグ</span></div>
|
||||||
|
<div class="lg_box_tag">
|
||||||
|
|
||||||
|
<a href="/tag/%E3%82%A2%E3%83%8B%E3%83%A1" class="tag" rel="tag">アニメ</a>
|
||||||
|
<a href="/tag/%E3%81%BE%E3%81%A1%E3%82%AB%E3%83%89%E3%81%BE%E3%81%9E%E3%81%8F" class="tag" rel="tag">まちカドまぞく</a>
|
||||||
|
<a href="/tag/%E3%82%B7%E3%83%A3%E3%83%9F%E5%AD%90" class="tag" rel="tag">シャミ子</a>
|
||||||
|
<a href="/tag/%E3%82%B7%E3%83%A3%E3%83%89%E3%82%A6%E3%83%9F%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E5%84%AA%E5%AD%90" class="tag" rel="tag">シャドウミストレス優子</a>
|
||||||
|
<a href="/tag/%E5%90%89%E7%94%B0%E5%84%AA%E5%AD%90" class="tag" rel="tag">吉田優子</a>
|
||||||
|
<a href="/tag/%E5%8D%B1%E6%A9%9F%E7%AE%A1%E7%90%86%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0" class="tag" rel="tag">危機管理フォーム</a>
|
||||||
|
<a href="/tag/%E3%82%B7%E3%83%A3%E3%83%9F%E5%AD%90%E3%81%8C%E6%82%AA%E3%81%84%E3%82%93%E3%81%A0%E3%82%88" class="tag" rel="tag">シャミ子が悪いんだよ</a>
|
||||||
|
<a href="/tag/%E8%B5%A4%E9%9D%A2" class="tag" rel="tag">赤面</a>
|
||||||
|
<a href="/tag/%E3%82%B7%E3%83%A3%E3%83%9F%E5%AD%90%E3%81%AF%E6%82%AA%E3%81%8F%E3%81%AA%E3%81%84%E3%82%88" class="tag" rel="tag">シャミ子は悪くないよ</a>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- ▲Illust -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--↑メインコンテンツ-->
|
||||||
|
</body>
|
||||||
|
</html>
|
89
tests/fixture/NicoSeiga/shunga.html
vendored
Normal file
89
tests/fixture/NicoSeiga/shunga.html
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="ja" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="Content-Script-Type" content="text/javascript">
|
||||||
|
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||||
|
<meta name="description" content="待つ側の方がつよいってスマブラが伝えてきたので">
|
||||||
|
<meta name="copyright" content="© DWANGO Co., Ltd.">
|
||||||
|
<meta name="keywords" content="R-15,結月ゆかり,VOICEROID,裸パーカー,謎の光">
|
||||||
|
<meta name="google-site-verification" content="X1ARxKsFZK8gXr39X1KnF8tzHbcCj5lVZ-jQB0VwS-I" />
|
||||||
|
<meta property="mixi:content-rating" content="1" />
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:description" content="待つ側の方がつよいってスマブラが伝えてきたので">
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<meta property="og:title" content="ベッドのゆかりさん / せゆーら/Se-U-Ra さんのイラスト" />
|
||||||
|
<meta property="og:url" content="http://seiga.nicovideo.jp/seiga/im9232798" />
|
||||||
|
<meta property="og:description" content="待つ側の方がつよいってスマブラが伝えてきたので" />
|
||||||
|
<meta property="og:site_name" content="ニコニコ静画 (イラスト)" />
|
||||||
|
<meta property="og:image" content="http://seiga.nicovideo.jp/img/shunga/adult_warning.png" />
|
||||||
|
<title>ベッドのゆかりさん / せゆーら/Se-U-Ra さんのイラスト - ニコニコ静画 (イラスト)</title>
|
||||||
|
<link rel="canonical" href="http://seiga.nicovideo.jp/seiga/im9232798" />
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/common/common_l.css?pzsf3v">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/illust/common.css?201401061430">
|
||||||
|
<link href="/css/login.css?201106241500" rel="stylesheet" type="text/css">
|
||||||
|
<link href="/css/illust.css?201104270015" rel="stylesheet" type="text/css">
|
||||||
|
<link href="/css/illust_list.css?201104270015" rel="stylesheet" type="text/css">
|
||||||
|
<link href="/css/ichiba_2.css?201511242239" rel="stylesheet" type="text/css">
|
||||||
|
<!--[if IE 7]>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/manga/ie7.css">
|
||||||
|
<![endif]-->
|
||||||
|
<script src="/js/common.min.js?q0xrj7" type="text/javascript"></script>
|
||||||
|
<script src="/js/illust/common.min.js?xjmqae" type="text/javascript"></script>
|
||||||
|
|
||||||
|
<body class="mode_2">
|
||||||
|
<!--↓メインコンテンツ-->
|
||||||
|
|
||||||
|
|
||||||
|
<div id="login_im_container">
|
||||||
|
<div id="login_im_left">
|
||||||
|
|
||||||
|
<!-- ▼Illust -->
|
||||||
|
<div id="login_im">
|
||||||
|
|
||||||
|
<div id="login_exp_area">
|
||||||
|
<img src="/img/login/title.png" alt="ログインすることで、フルサイズの画像を閲覧・コメントの投稿ができます。">
|
||||||
|
</div>
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" id="illust_area">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div style="color:#900;padding-top:10px;font-weight:bold;">
|
||||||
|
15歳未満の方には不適切な表現が含まれる可能性があるため<br>サムネイルを非表示にしています
|
||||||
|
</div>
|
||||||
|
<a id="link_thumbnail_main" href="/login/redirect?next_url=%2Fseiga%2Fim9232798">
|
||||||
|
<img src="/img/shunga/adult_warning.png" alt="ベッドのゆかりさん">
|
||||||
|
|
||||||
|
</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="lg_ttl_illust"><h1>ベッドのゆかりさん</h1></div>
|
||||||
|
<div class="lg_txt_illust">投稿者:<strong>せゆーら/Se-U-Ra</strong> さん</div>
|
||||||
|
<div class="lg_txt_illust">待つ側の方がつよいってスマブラが伝えてきたので</div>
|
||||||
|
|
||||||
|
<div class="lg_txt_date">2019年05月07日 12:59:32 投稿</div>
|
||||||
|
<div class="lg_txt_illust"><span class="bold">登録タグ</span></div>
|
||||||
|
<div class="lg_box_tag">
|
||||||
|
|
||||||
|
<a href="/tag/R-15" class="tag" rel="tag">R-15</a>
|
||||||
|
<a href="/tag/%E7%B5%90%E6%9C%88%E3%82%86%E3%81%8B%E3%82%8A" class="tag" rel="tag">結月ゆかり</a>
|
||||||
|
<a href="/tag/VOICEROID" class="tag" rel="tag">VOICEROID</a>
|
||||||
|
<a href="/tag/%E8%A3%B8%E3%83%91%E3%83%BC%E3%82%AB%E3%83%BC" class="tag" rel="tag">裸パーカー</a>
|
||||||
|
<a href="/tag/%E8%AC%8E%E3%81%AE%E5%85%89" class="tag" rel="tag">謎の光</a>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- ▲Illust -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--↑メインコンテンツ-->
|
||||||
|
</body>
|
||||||
|
</html>
|
File diff suppressed because one or more lines are too long
114
tests/fixture/Nijie/testHasHtmlInAuthorProfileResponse.html
vendored
Normal file
114
tests/fixture/Nijie/testHasHtmlInAuthorProfileResponse.html
vendored
Normal file
File diff suppressed because one or more lines are too long
124
tests/fixture/Nijie/testMp4MovieResponse.html
vendored
124
tests/fixture/Nijie/testMp4MovieResponse.html
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user