7 Commits

Author SHA1 Message Date
eai04191
dea1eeabd6 エラーを前置きにした
Co-authored-by: hina <hina@hinaloe.net>
2019-07-03 17:03:30 +09:00
eai04191
0284827fcf 型「カタカタ……」 2019-07-03 16:33:24 +09:00
eai04191
d7ffcfcf7b コメントを検索対象に含まれないようにする 2019-07-03 16:29:38 +09:00
eai04191
23f9d1a220 配列をまとめた
Co-authored-by: hina <hina@hinaloe.net>
2019-07-03 15:12:53 +09:00
eai04191
a47f4537b1 Add test fixture update command 2019-07-02 15:02:29 +09:00
eai04191
a13ac75fba テストをユニークにする
ついでにテスト名とfixtureファイル名を同一にする
2019-07-02 15:02:29 +09:00
eai04191
a4fbed9060 死んだテストを交換 2019-07-02 15:02:29 +09:00
51 changed files with 4893 additions and 14286 deletions

View File

@@ -1,6 +1,6 @@
version: 2.1
version: 2
executors:
jobs:
build:
docker:
- image: circleci/php:7.1-node-browsers
@@ -17,74 +17,37 @@ executors:
POSTGRES_DB: tissue
POSTGRES_USER: tissue
POSTGRES_PASSWORD: tissue
commands:
initialize:
steps:
- checkout
- run: sudo apt update
- run: sudo apt install -y libpq-dev
- run: sudo docker-php-ext-install zip
- run: sudo docker-php-ext-install pdo_pgsql
restore_composer:
steps:
- restore_cache:
keys:
- v1-dependencies-{{ checksum "composer.json" }}
- v1-dependencies-
save_composer:
steps:
- run: composer install -n --prefer-dist
- save_cache:
key: v1-dependencies-{{ checksum "composer.json" }}
paths:
- ./vendor
restore_npm:
steps:
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
- v1-dependencies-
save_npm:
steps:
- run: yarn install
- save_cache:
key: v1-dependencies-{{ checksum "package.json" }}
paths:
- ./node_modules
- ~/.yarn
jobs:
build:
executor: build
steps:
- initialize
- restore_composer
- run: composer install -n --prefer-dist
- save_composer
- restore_npm
- run: yarn install
- save_npm
- run: yarn run prod
- persist_to_workspace:
root: .
paths:
- public
test:
executor: build
steps:
- initialize
- restore_composer
- restore_npm
- attach_workspace:
at: .
- run: php artisan migrate
- run: yarn run prod
# Run linter
- run:
@@ -116,51 +79,3 @@ jobs:
- run:
command: bash <(curl -s https://codecov.io/bash) -f /tmp/phpunit/coverage.xml
when: always
test_resolver:
executor: build
environment:
TEST_USE_HTTP_MOCK: false
steps:
- initialize
- restore_composer
- attach_workspace:
at: .
- run: php artisan migrate
# Run unit test
- run:
command: |
mkdir -p /tmp/phpunit
./vendor/bin/phpunit --testsuite MetadataResolver --log-junit /tmp/phpunit/phpunit.xml --coverage-clover=/tmp/phpunit/coverage.xml
when: always
- store_test_results:
path: /tmp/phpunit
- store_artifacts:
path: /tmp/phpunit/coverage.xml
workflows:
version: 2.1
test:
jobs:
- build
- test:
requires:
- build
scheduled_resolver_test:
triggers:
- schedule:
cron: "4 0 * * 1"
filters:
branches:
only:
- develop
jobs:
- build
- test_resolver:
requires:
- build

View File

@@ -10,7 +10,6 @@ RUN apt-get update \
&& pecl install xdebug \
&& curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& composer global require hirak/prestissimo \
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
&& sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
&& a2enmod rewrite

View File

@@ -36,6 +36,7 @@ docker-compose up -d
4. Composer と yarn を使い必要なライブラリをインストールします。
```
docker-compose exec web composer global require hirak/prestissimo
docker-compose exec web composer install
docker-compose exec web yarn install
```

View File

@@ -0,0 +1,82 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class UpdateFixture extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'test:fixture:update {resolver : Some Resolver Name }';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update specific fixtures';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$resolver_base_path = __DIR__ . '/../../../tests/Unit/MetadataResolver/';
$test_file_path = $resolver_base_path . $this->argument('resolver') . 'ResolverTest.php';
if (!file_exists($test_file_path)) {
throw new \RuntimeException($this->argument('resolver') . 'ResolverTest.php is not found.');
}
$this->info($this->argument('resolver') . 'ResolverTest.php is found.');
$test_file = file_get_contents($test_file_path);
$test_file_without_comment = '';
// コメントを削除する
$tokens = token_get_all($test_file);
foreach ($tokens as $token) {
if (is_string($token)) {
$test_file_without_comment .= $token;
} else {
list($id, $text) = $token;
if (token_name($id) !== 'T_COMMENT') {
$test_file_without_comment .= $text;
}
}
}
preg_match_all('~file_get_contents\(__DIR__ . \'/(.+)\'\);~', $test_file_without_comment, $fixtures);
preg_match_all('~\$this->assertSame\(\'(.+)\', \(string\) \$this->handler->getLastRequest\(\)->getUri\(\)\);~m', $test_file_without_comment, $urls);
$update_list = array_combine($fixtures[1], $urls[1]);
$progress = $this->output->createProgressBar(count($update_list));
$progress->setFormat('Updating %path% from %url%' . PHP_EOL . '%current%/%max% [%bar%] %percent:3s%%');
foreach ($update_list as $path => $url) {
sleep(1);
$progress->setMessage($path, 'path');
$progress->setMessage($url, 'url');
file_put_contents($resolver_base_path . $path, file_get_contents($url));
$progress->advance();
}
$progress->finish();
$this->output->newLine();
$this->info('Update Complete!');
}
}

View File

@@ -109,6 +109,13 @@ SQL
}
}
// 月間グラフ用の配列初期化
$month = Carbon::now()->firstOfMonth()->subMonth(11); // 直近12ヶ月
for ($i = 0; $i < 12; $i++) {
$monthlySum[$month->format('Y/m')] = 0;
$month->addMonth();
}
foreach ($groupByDay as $data) {
$date = Carbon::createFromFormat('Y/m/d', $data->date);
$yearAndMonth = $date->format('Y/m');
@@ -116,18 +123,21 @@ SQL
$dailySum[$date->timestamp] = $data->count;
$yearlySum[$date->year] += $data->count;
$dowSum[$date->dayOfWeek] += $data->count;
$monthlySum[$yearAndMonth] = ($monthlySum[$yearAndMonth] ?? 0) + $data->count;
if (isset($monthlySum[$yearAndMonth])) {
$monthlySum[$yearAndMonth] += $data->count;
}
}
foreach ($groupByHour as $data) {
$hour = (int)$data->hour;
$hourlySum[$hour] += $data->count;
}
$graphData = [
'dailySum' => $dailySum,
'dowSum' => $dowSum,
'monthlySum' => $monthlySum,
'monthlyKey' => array_keys($monthlySum),
'monthlySum' => array_values($monthlySum),
'yearlyKey' => array_keys($yearlySum),
'yearlySum' => array_values($yearlySum),
'hourlyKey' => array_keys($hourlySum),

View File

@@ -28,7 +28,6 @@ class MetadataResolver implements Resolver
'~www\.plurk\.com\/p\/.*~' => PlurkResolver::class,
'~(adult\.)?contents\.fc2\.com\/article_search\.php\?id=\d+~' => FC2ContentsResolver::class,
'~store\.steampowered\.com/app/\d+~' => SteamResolver::class,
'~www\.xtube\.com/video-watch/.*-\d+$~'=> XtubeResolver::class,
];
public $mimeTypes = [

View File

@@ -24,19 +24,11 @@ class ToranoanaResolver implements Resolver
public function resolve(string $url): Metadata
{
$res = $this->client->get($url);
$cookieJar = CookieJar::fromArray(['adflg' => '0'], 'ec.toranoana.jp');
$res = $this->client->get($url, ['cookies' => $cookieJar]);
if ($res->getStatusCode() === 200) {
$metadata = $this->ogpResolver->parse($res->getBody());
$dom = new \DOMDocument();
@$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
$xpath = new \DOMXPath($dom);
$imgNode = $xpath->query('//*[@id="preview"]//img')->item(0);
if ($imgNode !== null) {
$metadata->image = $imgNode->getAttribute('src');
}
return $metadata;
return $this->ogpResolver->parse($res->getBody());
} else {
throw new \RuntimeException("{$res->getStatusCode()}: $url");
}

View File

@@ -1,41 +0,0 @@
<?php
namespace App\MetadataResolver;
use GuzzleHttp\Client;
class XtubeResolver implements Resolver
{
/**
* @var Client
*/
private $client;
public function __construct(Client $client)
{
$this->client = $client;
}
public function resolve(string $url): Metadata
{
if (preg_match('~www\.xtube\.com/video-watch/.*-(\d+)$~', $url, $matches) !== 1) {
throw new \RuntimeException("Unmatched URL Pattern: $url");
}
$videoid = $matches[1];
$res = $this->client->get('https://www.xtube.com/webmaster/api/getvideobyid?video_id=' . $videoid);
if ($res->getStatusCode() === 200) {
$data = json_decode($res->getBody()->getContents(), true);
$metadata = new Metadata();
$metadata->title = $data['title'] ?? '';
$metadata->description = strip_tags(str_replace('\n', PHP_EOL, html_entity_decode($data['description'] ?? '')));
$metadata->image = str_replace('eSuQ8f', 'eSK08f', $data['thumb'] ?? ''); // 300x169 to 300x210
$metadata->tags = array_values(array_unique($data['tags']));
return $metadata;
} else {
throw new \RuntimeException("{$res->getStatusCode()}: $url");
}
}
}

View File

@@ -16,7 +16,6 @@
"cal-heatmap": "^3.3.10",
"chart.js": "^2.7.1",
"cross-env": "^5.2.0",
"date-fns": "^1.30.1",
"husky": "^1.3.1",
"jquery": "^3.2.1",
"js-cookie": "^2.2.0",

View File

@@ -16,10 +16,6 @@
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="MetadataResolver">
<directory suffix="Test.php">./tests/Unit/MetadataResolver</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">

View File

@@ -11,7 +11,7 @@
</div>
<div v-else-if="state === MetadataLoadState.Success" class="row no-gutters">
<div v-if="hasImage" class="col-4 justify-content-center align-items-center">
<img :src="metadata.image" alt="Thumbnail" class="w-100 bg-secondary">
<img :src="metadata.image" alt="Thumbnail" class="card-img-top-to-left bg-secondary">
</div>
<div :class="descClasses">
<div class="card-body">
@@ -20,8 +20,8 @@
<p class="card-text mb-2" style="font-size: small;">タグ候補<br><span class="text-secondary">(クリックするとタグ入力欄にコピーできます)</span></p>
<ul class="list-inline d-inline">
<li v-for="tag in suggestions"
:class="tagClasses(tag)"
@click="addTag(tag.name)"><span class="oi oi-tag"></span> {{ tag.name }}</li>
class="list-inline-item badge badge-primary metadata-tag-item"
@click="addTag(tag)"><span class="oi oi-tag"></span> {{ tag }}</li>
</ul>
</template>
</div>
@@ -54,11 +54,6 @@
}[],
};
type Suggestion = {
name: string,
used: boolean,
}
@Component
export default class MetadataPreview extends Vue {
@Prop() readonly state!: MetadataLoadState;
@@ -67,38 +62,16 @@
// for use in v-if
private readonly MetadataLoadState = MetadataLoadState;
tags: string[] = [];
created() {
bus.$on("change-tag", (tags: string[]) => this.tags = tags);
bus.$emit("resend-tag");
}
addTag(tag: string) {
bus.$emit("add-tag", tag);
}
tagClasses(s: Suggestion) {
return {
"list-inline-item": true,
"badge": true,
"badge-primary": !s.used,
"badge-secondary": s.used,
"metadata-tag-item": true,
};
}
get suggestions(): Suggestion[] {
get suggestions() {
if (this.metadata === null) {
return [];
}
return this.metadata.tags.map(t => {
return {
name: t.name,
used: this.tags.indexOf(t.name) !== -1
};
});
return this.metadata.tags.map(t => t.name);
}
get hasImage() {
@@ -117,7 +90,10 @@
<style lang="scss" scoped>
.link-card-mini {
$height: 150px;
overflow: hidden;
.row > div {
overflow: hidden;
}
.row > div:first-child {
display: flex;

View File

@@ -16,7 +16,7 @@
</template>
<script lang="ts">
import {Vue, Component, Prop, Watch} from "vue-property-decorator";
import {Vue, Component, Prop} from "vue-property-decorator";
import {bus} from "../checkin";
@Component
@@ -31,7 +31,6 @@
created() {
bus.$on("add-tag", (tag: string) => this.tags.indexOf(tag) === -1 && this.tags.push(tag));
bus.$on("resend-tag", () => bus.$emit("change-tag", this.tags));
}
onKeyDown(event: KeyboardEvent) {
@@ -57,11 +56,6 @@
this.tags.splice(index, 1);
}
@Watch("tags")
onTagsChanged() {
bus.$emit("change-tag", this.tags);
}
get containerClass(): object {
return {
"form-control": true,

View File

@@ -1,12 +1,9 @@
import CalHeatMap from 'cal-heatmap';
import Chart from 'chart.js';
import {addMonths, format, startOfMonth, subMonths} from 'date-fns';
const graphData = JSON.parse(document.getElementById('graph-data').textContent);
function createLineGraph(id, labels, data) {
const context = document.getElementById(id).getContext('2d');
return new Chart(context, {
new Chart(context, {
type: 'line',
data: {
labels: labels,
@@ -65,22 +62,7 @@ function createBarGraph(id, labels, data) {
});
}
/**
* @param {Date} from
*/
function createMonthlyGraphData(from) {
const keys = [];
const values = [];
for (let i = 0; i < 12; i++) {
const current = addMonths(from, i);
const yearAndMonth = format(current, 'YYYY/MM');
keys.push(yearAndMonth);
values.push(graphData.monthlySum[yearAndMonth] || 0);
}
return {keys, values};
}
const graphData = JSON.parse(document.getElementById('graph-data').textContent);
new CalHeatMap().init({
itemSelector: '#cal-heatmap',
@@ -94,40 +76,7 @@ new CalHeatMap().init({
legend: [1, 2, 3, 4]
});
// 直近1年の月間グラフのデータを準備
const monthlyTermFrom = subMonths(startOfMonth(new Date()), 11);
const {keys: monthlyKey, values: monthlySum} = createMonthlyGraphData(monthlyTermFrom);
const monthlyGraph = createLineGraph('monthly-graph', monthlyKey, monthlySum);
createLineGraph('monthly-graph', graphData.monthlyKey, graphData.monthlySum);
createLineGraph('yearly-graph', graphData.yearlyKey, graphData.yearlySum);
createBarGraph('hourly-graph', graphData.hourlyKey, graphData.hourlySum);
createBarGraph('dow-graph', ['日', '月', '火', '水', '木', '金', '土'], graphData.dowSum);
// 月間グラフの期間セレクターを準備
const monthlyTermSelector = document.getElementById('monthly-term');
for (let year = monthlyTermFrom.getFullYear(); year <= new Date().getFullYear(); year++) {
const opt = document.createElement('option');
opt.setAttribute('value', year);
opt.textContent = `${year}`;
monthlyTermSelector.insertBefore(opt, monthlyTermSelector.firstChild);
}
if (monthlyTermSelector.children.length) {
monthlyTermSelector.selectedIndex = 0;
}
monthlyTermSelector.addEventListener('change', function (e) {
let monthlyTermFrom;
if (e.target.selectedIndex === 0) {
// 今年のデータを表示する時は、直近12ヶ月を表示
monthlyTermFrom = subMonths(startOfMonth(new Date()), 11);
} else {
// 過去のデータを表示する時は、選択年の1〜12月を表示
monthlyTermFrom = new Date(e.target.value, 0, 1);
}
const {keys, values} = createMonthlyGraphData(monthlyTermFrom);
monthlyGraph.data.labels = keys;
monthlyGraph.data.datasets[0].data = values;
monthlyGraph.update();
});
createBarGraph('dow-graph', ['日', '月', '火', '水', '木', '金', '土'], graphData.dowSum);

View File

@@ -0,0 +1,19 @@
.card-img-left {
width: 100%;
@include border-left-radius($card-inner-border-radius);
}
.card-img-right {
width: 100%;
@include border-right-radius($card-inner-border-radius);
}
.card-img-top-to-left {
width: 100%;
@include media-breakpoint-down(md) {
@include border-top-radius($card-inner-border-radius);
}
@include media-breakpoint-up(lg) {
@include border-left-radius($card-inner-border-radius);
}
}

View File

@@ -3,6 +3,7 @@ $primary: #e53fb1;
// Bootstrap
@import "~bootstrap/scss/bootstrap";
@import "bootstrap-custom";
// Open Iconic
@import "~open-iconic/font/css/open-iconic-bootstrap";

View File

@@ -1,6 +1,4 @@
.link-card {
overflow: hidden;
.row > div {
max-height: 400px;
overflow: hidden;

View File

@@ -76,5 +76,4 @@
#navbarAccountDropdownSp {
max-width: calc(100vw - 5em);
}
}

View File

@@ -2,7 +2,7 @@
<a class="text-dark card-link" href="{{ $link }}" target="_blank" rel="noopener">
<div class="row no-gutters">
<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="card-img-top-to-left bg-secondary">
</div>
<div class="col-12 col-md-6">
<div class="card-body">

View File

@@ -1,9 +0,0 @@
<div class="card okazu-card overflow-hidden d-none">
<a href="{{ $link }}" target="_blank" rel="noopener">
<img src="" class="card-img" alt="">
<div class="card-img-overlay d-flex align-items-end p-3">
<h5 class="card-title overflow-hidden m-0 font-weight-bold p-1" style="text-overflow: ellipsis;white-space: nowrap;background: rgba(229, 63, 177, 0.75);color: white;">Card title</h5>
<p class="card-text overflow-hidden d-none" style="text-overflow: ellipsis;white-space: nowrap;">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
</a>
</div>

View File

@@ -31,41 +31,6 @@
<p class="mt-4">
<span class="oi oi-lock-locked"></span> このユーザはチェックイン履歴を公開していません。
</p>
@elseif (Route::currentRouteName() === 'user.okazu')
@push('script')
<script>
document.querySelectorAll(".okazu-card").forEach(card => {
const title = card.querySelector(".card-title");
const description = card.querySelector(".card-text");
const image = card.querySelector(".card-img");
const params = new URLSearchParams();
params.set('url', card.querySelector("a").href);
fetch("/api/checkin/card?" + params.toString())
.then(response => response.json())
.then(json => {
if (json.image) {
title.innerText = json.title;
description.innerText = json.description;
image.setAttribute("src", json.image);
card.classList.remove("d-none");
}
})
});
</script>
@endpush
<div class="card-columns mt-3">
@forelse ($ejaculations as $ejaculation)
@component('components.okazu-card', ['link' => $ejaculation->link])
@endcomponent
@empty
<li class="list-group-item border-bottom-only">
<p>まだチェックインしていません。</p>
</li>
@endforelse
</div>
@else
<ul class="list-group">
@forelse ($ejaculations as $ejaculation)

View File

@@ -15,14 +15,7 @@
<h5 class="my-4">Shikontribution graph</h5>
<div id="cal-heatmap" class="tis-contribution-graph"></div>
<hr class="my-4">
<div class="row my-4">
<div class="col-12 col-lg-6 d-flex align-items-center">
<h5 class="my-0">月間チェックイン回数</h5>
</div>
<div class="col-12 col-lg-6 mt-2 mt-lg-0">
<select id="monthly-term" class="form-control"></select>
</div>
</div>
<h5 class="my-4">月間チェックイン回数</h5>
<canvas id="monthly-graph" class="w-100"></canvas>
<hr class="my-4">
<h5 class="my-4">年間チェックイン回数</h5>

View File

@@ -196,8 +196,7 @@ class DLsiteResolverTest extends TestCase
public function testSPLink()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testHome.html');
// SP版touchのURLのテストだがリゾルバ側でURLから-touchを削除してPC版を取得するので、PC版の内容を使用する
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testSPLink.html');
$this->createResolver(DLsiteResolver::class, $responseText);
@@ -213,7 +212,7 @@ class DLsiteResolverTest extends TestCase
public function testShortLink()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testHome.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/DLsite/testShortLink.html');
$this->createResolver(DLsiteResolver::class, $responseText);

View File

@@ -20,7 +20,7 @@ class NijieResolverTest extends TestCase
public function testStandardPicture()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPicture.html');
$this->createResolver(NijieResolver::class, $responseText);
@@ -36,7 +36,7 @@ class NijieResolverTest extends TestCase
public function testMultiplePicture()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePicture.html');
$this->createResolver(NijieResolver::class, $responseText);
@@ -52,7 +52,7 @@ class NijieResolverTest extends TestCase
public function testAnimationGif()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGif.html');
$this->createResolver(NijieResolver::class, $responseText);
@@ -67,7 +67,7 @@ class NijieResolverTest extends TestCase
public function testMp4Movie()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4Movie.html');
$this->createResolver(NijieResolver::class, $responseText);
@@ -82,7 +82,7 @@ class NijieResolverTest extends TestCase
public function testStandardPictureSp()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureSp.html');
$this->createResolver(NijieResolver::class, $responseText);
@@ -98,7 +98,7 @@ class NijieResolverTest extends TestCase
public function testMultiplePictureSp()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureSp.html');
$this->createResolver(NijieResolver::class, $responseText);
@@ -114,7 +114,7 @@ class NijieResolverTest extends TestCase
public function testAnimationGifSp()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifSp.html');
$this->createResolver(NijieResolver::class, $responseText);
@@ -130,7 +130,7 @@ class NijieResolverTest extends TestCase
public function testMp4MovieSp()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieResponse.html');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieSp.html');
$this->createResolver(NijieResolver::class, $responseText);

View File

@@ -20,7 +20,7 @@ class PixivResolverTest extends TestCase
public function testIllust()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/illust.json');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/testIllust.json');
$this->createResolver(PixivResolver::class, $responseText);
@@ -36,23 +36,23 @@ class PixivResolverTest extends TestCase
public function testIllustMultiPages()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/illustMultiPages.json');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/testIllustMultiPages.json');
$this->createResolver(PixivResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://www.pixiv.net/member_illust.php?mode=medium&illust_id=74939802');
$this->assertEquals('T-20S', $metadata->title);
$this->assertEquals('投稿者: amssc' . PHP_EOL . 'JUST FOR FUN' . PHP_EOL . '现在可以做到游戏内立绘修改拉!立绘动态皮肤都可以支持,想要资助获得新技术请站内信联系我。', $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(['巨乳', '母乳', 'lastorigin', 'Last_Origin', 'T-20S', 'おっぱい', '라스트오리진', '노움'], $metadata->tags);
$metadata = $this->resolver->resolve('https://www.pixiv.net/member_illust.php?mode=medium&illust_id=47220843');
$this->assertEquals('がぶ飲みミルクティー', $metadata->title);
$this->assertEquals('投稿者: きっぷる' . PHP_EOL . '劇中で度々お見かけするお姿がたまらなく愛おしいのです' . PHP_EOL . 'チラリズムでしょうか', $metadata->description);
$this->assertEquals('https://i.pixiv.cat/img-master/img/2014/11/23/15/52/00/47220843_p0_master1200.jpg', $metadata->image);
$this->assertEquals(['SHIROBAKO', '小笠原綸子', 'ゴスロリ様', '中出し', 'SHIRUPAKO', 'くわえたくしあげ', 'ずらし挿入', 'SHIROBAKO1000users入り', '破れストッキング'], $metadata->tags);
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/47220843', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testManga()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/manga.json');
$responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/testManga.json');
$this->createResolver(PixivResolver::class, $responseText);

View File

@@ -28,6 +28,9 @@ class SteamResolverTest extends TestCase
$this->assertEquals('NEKOPARA Vol. 1', $metadata->title);
$this->assertEquals('水無月嘉祥(みなづき かしょう)は伝統ある老舗和菓子屋である実家を出て、 パティシエとして自身のケーキ屋『ラ・ソレイユ』を一人で開店する。 しかし実家から送った引っ越し荷物の中に、 実家で飼っていた人型ネコのショコラとバニラが紛れ込んでいた。', $metadata->description);
$this->assertStringStartsWith('https://steamcdn-a.akamaihd.net/steam/apps/333600/header.jpg?t=', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://store.steampowered.com/api/appdetails/?l=japanese&appids=333600', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testR18()
@@ -40,6 +43,9 @@ class SteamResolverTest extends TestCase
$this->assertEquals('Broke Girl | 負債千金', $metadata->title);
$this->assertEquals('苦労知らずに育ったお嬢様は一夜にして1000万の借金を背負うことになった。借金を返済するために働かなければならない。しかし世間には悪意が満ちており、男達はお金で彼女を誘うか凌辱することしか考えていない。', $metadata->description);
$this->assertStringStartsWith('https://steamcdn-a.akamaihd.net/steam/apps/1077580/header.jpg?t=', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://store.steampowered.com/api/appdetails/?l=japanese&appids=1077580', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testNotFound()
@@ -51,5 +57,8 @@ class SteamResolverTest extends TestCase
$this->createResolver(SteamResolver::class, $responseText);
$this->resolver->resolve('https://store.steampowered.com/app/1');
if ($this->shouldUseMock()) {
$this->assertSame('https://store.steampowered.com/api/appdetails/?l=japanese&appids=1', (string) $this->handler->getLastRequest()->getUri());
}
}
}

View File

@@ -1,140 +0,0 @@
<?php
namespace Tests\Unit\MetadataResolver;
use App\MetadataResolver\ToranoanaResolver;
use Tests\TestCase;
class ToranoanaResolverTest extends TestCase
{
use CreateMockedResolver;
public function setUp()
{
parent::setUp();
if (!$this->shouldUseMock()) {
sleep(1);
}
}
public function testTora()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testTora.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/tora/ec/item/040030720152');
$this->assertEquals('新・古明地喫茶~そしてまた扉は開く~', $metadata->title);
$this->assertEquals('サークル【ツキギのとこ】(槻木こうすけ)発行の「新・古明地喫茶~そしてまた扉は開く~」を買うなら、とらのあな全年齢向け通信販売!', $metadata->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.shop/tora/ec/item/040030720152', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testToraR()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testToraR.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/tora_r/ec/item/040030720174');
$this->assertEquals('お姉ちゃんが妹のぱんつでひとりえっちしてました。', $metadata->title);
$this->assertEquals('サークル【没後】RYO発行の「お姉ちゃんが妹のぱんつでひとりえっちしてました。」を買うなら、とらのあな成年向け通信販売', $metadata->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.jp/tora_r/ec/item/040030720174', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testToraD()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testToraD.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$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->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.shop/tora_d/digi/item/042000013358', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testToraRD()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testToraRD.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/tora_rd/digi/item/042000013181');
$this->assertEquals('放課後のお花摘み', $metadata->title);
$this->assertEquals('サークル【給食泥棒】(村雲)発行の「放課後のお花摘み」を買うなら、とらのあな成年向け電子書籍!', $metadata->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.jp/tora_rd/digi/item/042000013181', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testJoshi()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testJoshi.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/joshi/ec/item/040030702729');
$this->assertEquals('円卓のクソ漫画', $metadata->title);
$this->assertEquals('サークル【地獄のすなぎもカーニバル】槌田発行の「円卓のクソ漫画」を買うなら、とらのあなJOSHIBU全年齢向け通信販売', $metadata->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.shop/joshi/ec/item/040030702729', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testJoshiR()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testJoshiR.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/joshi_r/ec/item/040030730126');
$this->assertEquals('リバースナイトリバース', $metadata->title);
$this->assertEquals('サークル【雨傘サイクル】チャリリズム発行の「リバースナイトリバース」を買うなら、とらのあなJOSHIBU成年向け通信販売', $metadata->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.jp/joshi_r/ec/item/040030730126', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testJoshiD()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testJoshiD.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://ec.toranoana.shop/joshi_d/digi/item/042000012192');
$this->assertEquals('超幸運ガール審神者GOLDEN', $metadata->title);
$this->assertEquals('サークル【Day Of The Dead】ほんちゅ発行の「超幸運ガール審神者GOLDEN」を買うなら、とらのあなJOSHIBU全年齢向け電子書籍', $metadata->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.shop/joshi_d/digi/item/042000012192', (string) $this->handler->getLastRequest()->getUri());
}
}
public function testJoshiRD()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Toranoana/testJoshiRD.html');
$this->createResolver(ToranoanaResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://ec.toranoana.jp/joshi_rd/digi/item/042000013472');
$this->assertEquals('UBWの裏側で非公式に遠坂凛をナデナデする本', $metadata->title);
$this->assertEquals('サークル【阿仁谷組】阿仁谷ユイジ発行の「UBWの裏側で非公式に遠坂凛をナデナデする本」を買うなら、とらのあなJOSHIBU成年向け電子書籍', $metadata->description);
$this->assertRegExp('~ecdnimg\.toranoana\.jp/ec/img/.*\.jpg~', $metadata->image);
if ($this->shouldUseMock()) {
$this->assertSame('https://ec.toranoana.jp/joshi_rd/digi/item/042000013472', (string) $this->handler->getLastRequest()->getUri());
}
}
}

View File

@@ -1,51 +0,0 @@
<?php
namespace Tests\Unit\MetadataResolver;
use App\MetadataResolver\XtubeResolver;
use Tests\TestCase;
class XtubeResolverTest extends TestCase
{
use CreateMockedResolver;
public function setUp()
{
parent::setUp();
if (!$this->shouldUseMock()) {
sleep(1);
}
}
public function test()
{
$responseText = file_get_contents(__DIR__ . '/../../fixture/Xtube/test.json');
$this->createResolver(XtubeResolver::class, $responseText);
$metadata = $this->resolver->resolve('https://www.xtube.com/video-watch/homegrown-big-tits-18634762');
$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->assertRegExp('~https://cdn\d-s-hw-e5\.xtube\.com/m=eSK08f/videos/201302/07/RF4Nk-S774-/240X180/1\.jpg~', $metadata->image);
$this->assertEquals(['bigtits', 'homeg'], $metadata->tags);
}
public function testNotMatch()
{
$this->expectException(\RuntimeException::class);
$this->expectExceptionMessage('Unmatched URL Pattern: https://www.xtube.com/gallery/black-celebs-free-7686657');
$this->createResolver(XtubeResolver::class, '');
$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');
}
}

2159
tests/fixture/DLsite/testSPLink.html vendored Normal file

File diff suppressed because it is too large Load Diff

2159
tests/fixture/DLsite/testShortLink.html vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
<!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" lang="ja" xml:lang="ja"><head><link rel="alternate" media="handheld" href="http://mb.nijie.info/view.php?id=9537" /><link rel="alternate" media="only screen and (max-width: 640px)" href="https://sp.nijie.info/view.php?id=9537" /><link rel="canonical" href="https://nijie.info/view.php?id=9537" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=970" /><meta name="format-detection" content="telephone=no" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="Content-Style-Type" content="text/css; charset=utf-8" /><meta http-equiv="Content-Script-Type" content="text/javascript" /><meta http-equiv="Content-Language" content="ja" /><meta name="description" content="ニジエに投稿された、黒末アプコのイラスト「ニジエがgifに対応したんだってね 奥さん」です。この画像はニジエがgifに対応したんだってね 奥さん,黒末アプコ,おっぱい,陥没乳首,眼鏡,GIFアニメ,ぶるんぶるん,アニメgif,に関連があります。「アニメgifとか専門外なのでよくわかりませんでした」" /><meta name="keywords" content="ニジエがgifに対応したんだってね 奥さん,黒末アプコ,おっぱい,陥没乳首,眼鏡,GIFアニメ,ぶるんぶるん,アニメgif," /><meta property="og:title" content="ニジエがgifに対応したんだってね 奥さん | 黒末アプコ" /><meta property="og:type" content="article" /><meta property="og:description" content="アニメgifとか専門外なのでよくわかりませんでした" /><meta property="og:url" content="https://nijie.info/view.php?id=9537" /><meta property="og:image" content="https://nijie.info/pic/logo/nijie_logo_og.png?201902161557" /><meta property="og:site_name" content="ニジエがgifに対応したんだってね 奥さん | 黒末アプコ | ニジエ" /><meta property="og:email" content="info@nijie.co.jp" /><link rel="alternate" href="https://nijie.info/view.php?id=9537" hreflang="x-default" /><link rel="shortcut icon" href="https://nijie.info/icon/favicon.ico?201902161557" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://nijie.info/pic/icon/nijie.png?201902161557" /><title>ニジエがgifに対応したんだってね 奥さん | 黒末アプコ | ニジエ</title></head>
<body>
<!-- pickup some json -->
<script type="application/ld+json">{"@context": "http://schema.org","@type": "ImageObject","name": "ニジエがgifに対応したんだってね 奥さん","description": "アニメgifとか専門外なのでよくわかりませんでした","text": "アニメgifとか専門外なのでよくわかりませんでした","interactionCount": "10862 UserPlays, 6 UserComments","datePublished": "Sun Apr 8 06:59:48 2012","uploadDate": "Sun Apr 8 06:59:48 2012","dateModified": "Mon Apr 9 17:09:30 2012","copyrightYear": "2012","genre":"Image","contentLocation":"Japan","width":160,"height":90,"thumbnailUrl": "https://pic01.nijie.info/__rs_l160x160/nijie_picture/201204080659341943.gif","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"creator": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"editor": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"copyrightHolder": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ティッシュ","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Wed Nov 19 12:57:57 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ひっ さくや様! ガタガタガタ  ","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Thu Apr 19 20:48:02 2012","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "さっ、最高です!!","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Thu Apr 19 20:35:19 2012","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ぎょっ 新着コメントがtopに表示されないバグ  しこっていただけてさいわいです","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Sun Apr 8 14:04:52 2012","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "BreadcrumbList","itemListElement":[{"@type": "ListItem","position": 1,"item":{"@id": "https://nijie.info/members.php?id=1943","name": "黒末アプコ"}},{"@type": "ListItem","position": 2,"item":{"@id": "https://nijie.info/members_illust.php?id=1943","name": "黒末アプコさんのイラスト一覧"}},{"@type": "ListItem","position": 3,"item":{"@id": "https://nijie.info/view.php?id=9537","name": "ニジエがgifに対応したんだってね 奥さん"}}]}</script>
</body></html>

30
tests/fixture/Nijie/testMp4MovieSp.html vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
<!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" lang="ja" xml:lang="ja"><head><link rel="alternate" media="handheld" href="http://mb.nijie.info/view.php?id=202707" /><link rel="alternate" media="only screen and (max-width: 640px)" href="https://sp.nijie.info/view.php?id=202707" /><link rel="canonical" href="https://nijie.info/view.php?id=202707" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=970" /><meta name="format-detection" content="telephone=no" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="Content-Style-Type" content="text/css; charset=utf-8" /><meta http-equiv="Content-Script-Type" content="text/javascript" /><meta http-equiv="Content-Language" content="ja" /><meta name="description" content="ニジエに投稿された、ニジエ運営のイラスト「ニジエ壁紙」です。この画像はニジエ壁紙,ニジエ運営,ニジエたん,壁紙,に関連があります。「ニジエのPCとiphone用(4.7inch推奨)の壁紙です。
保存してご自由にお使いくださいませ。」" /><meta name="keywords" content="ニジエ壁紙,ニジエ運営,ニジエたん,壁紙," />
<meta property="og:title" content="ニジエ壁紙 | ニジエ運営" /><meta property="og:type" content="article" /><meta property="og:description" content="ニジエのPCとiphone用(4.7inch推奨)の壁紙です。
保存してご自由にお使いくださいませ。" /><meta property="og:url" content="https://nijie.info/view.php?id=202707" /><meta property="og:image" content="https://nijie.info/pic/logo/nijie_logo_og.png?201902161557" /><meta property="og:site_name" content="ニジエ壁紙 | ニジエ運営 | ニジエ" /><meta property="og:email" content="info@nijie.co.jp" /><link rel="alternate" href="https://nijie.info/view.php?id=202707" hreflang="x-default" /><link rel="shortcut icon" href="https://nijie.info/icon/favicon.ico?201902161557" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://nijie.info/pic/icon/nijie.png?201902161557" /><title>ニジエ壁紙 | ニジエ運営 | ニジエ</title></head>
<body>
<!-- pickup some JSON-LD -->
<script type="application/ld+json">{"@context": "http://schema.org","@type": "ImageObject","name": "ニジエ壁紙","description": "ニジエのPCとiphone用(4.7inch推奨)の壁紙です。
保存してご自由にお使いくださいませ。","text": "ニジエのPCとiphone用(4.7inch推奨)の壁紙です。
保存してご自由にお使いくださいませ。","interactionCount": "2301 UserPlays, 4 UserComments","datePublished": "Thu Feb 9 18:58:03 2017","uploadDate": "Thu Feb 9 18:58:03 2017","dateModified": "Thu Feb 9 18:58:03 2017","copyrightYear": "2017","genre":"Image","contentLocation":"Japan","width":160,"height":90,"thumbnailUrl": "https://pic03.nijie.info/__rs_l160x160/nijie_picture/38_20170209185801_0.png","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"creator": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"editor": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"copyrightHolder": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "やったぜ!","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Fri Feb 17 01:31:00 2017","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエ壁紙","sameAs": "https://nijie.info/view.php?id=202707"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ぺろぺろしたいです","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Fri Feb 17 01:30:54 2017","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエ壁紙","sameAs": "https://nijie.info/view.php?id=202707"}}</script>
</body></html>

View File

@@ -0,0 +1,16 @@
<!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" lang="ja" xml:lang="ja"><head><link rel="alternate" media="handheld" href="http://mb.nijie.info/view.php?id=66384" /><link rel="alternate" media="only screen and (max-width: 640px)" href="https://sp.nijie.info/view.php?id=66384" /><link rel="canonical" href="https://nijie.info/view.php?id=66384" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=970" /><meta name="format-detection" content="telephone=no" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="Content-Style-Type" content="text/css; charset=utf-8" /><meta http-equiv="Content-Script-Type" content="text/javascript" /><meta http-equiv="Content-Language" content="ja" /><meta name="description" content="ニジエに投稿された、ニジエ運営のイラスト「チンポップくんの日常ep.1「チンポップくんと釣り」」です。この画像はチンポップくんの日常ep.1「チンポップくんと釣り」,ニジエ運営,ニジエたん,釣り,チンポップ君の日常,公式漫画,に関連があります。「メールマガジン漫画のバックナンバー第一話です!
最新話はメールマガジンより配信中です。」" /><meta name="keywords" content="チンポップくんの日常ep.1「チンポップくんと釣り」,ニジエ運営,ニジエたん,釣り,チンポップ君の日常,公式漫画," /><meta property="og:title" content="チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営" /><meta property="og:type" content="article" /><meta property="og:description" content="メールマガジン漫画のバックナンバー第一話です!
最新話はメールマガジンより配信中です。" /><meta property="og:url" content="https://nijie.info/view.php?id=66384" /><meta property="og:image" content="https://nijie.info/pic/logo/nijie_logo_og.png?201902161557" /><meta property="og:site_name" content="チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営 | ニジエ" /><meta property="og:email" content="info@nijie.co.jp" /><link rel="alternate" href="https://nijie.info/view.php?id=66384" hreflang="x-default" /><link rel="shortcut icon" href="https://nijie.info/icon/favicon.ico?201902161557" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://nijie.info/pic/icon/nijie.png?201902161557" /><title>チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営 | ニジエ</title></head>
<body>
<!-- pickup only json -->
<script type="application/ld+json">{"@context": "http://schema.org","@type": "ImageObject","name": "チンポップくんの日常ep.1「チンポップくんと釣り」","description": "メールマガジン漫画のバックナンバー第一話です!
最新話はメールマガジンより配信中です。","text": "メールマガジン漫画のバックナンバー第一話です!
最新話はメールマガジンより配信中です。","interactionCount": "13634 UserPlays, 24 UserComments","datePublished": "Sat Nov 30 15:56:26 2013","uploadDate": "Sat Nov 30 15:56:26 2013","dateModified": "Sat Nov 30 15:56:26 2013","copyrightYear": "2013","genre":"Image","contentLocation":"Japan","width":160,"height":90,"thumbnailUrl": "https://pic04.nijie.info/__rs_l160x160/nijie_picture/38_20131130155623.png","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"creator": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"editor": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"copyrightHolder": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ミルコ字幕","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Tue Jan 27 08:58:02 2015","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ティッシュ","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Tue Aug 26 17:56:41 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ヨダレもの","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Mon Jun 23 10:17:29 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "おまわりさんこっちです","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Thu Mar 27 10:49:56 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script>
<script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "めちゃシコ","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Sat Feb 15 18:47:22 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script>
</body>
</html>

View File

@@ -1,227 +0,0 @@
{
"error": false,
"message": "",
"body": {
"illustId": "74939802",
"illustTitle": "T-20S",
"illustComment": "JUST FOR FUN<br />现在可以做到游戏内立绘修改拉!立绘动态皮肤都可以支持,想要资助获得新技术请站内信联系我。",
"id": "74939802",
"title": "T-20S",
"description": "JUST FOR FUN<br />现在可以做到游戏内立绘修改拉!立绘动态皮肤都可以支持,想要资助获得新技术请站内信联系我。",
"illustType": 0,
"createDate": "2019-05-27T16:16:24+00:00",
"uploadDate": "2019-05-27T16:16:24+00:00",
"restrict": 0,
"xRestrict": 1,
"sl": 6,
"urls": {
"mini": "https://i.pximg.net/c/48x48/img-master/img/2019/05/28/01/16/24/74939802_p0_square1200.jpg",
"thumb": "https://i.pximg.net/c/250x250_80_a2/img-master/img/2019/05/28/01/16/24/74939802_p0_square1200.jpg",
"small": "https://i.pximg.net/c/540x540_70/img-master/img/2019/05/28/01/16/24/74939802_p0_master1200.jpg",
"regular": "https://i.pximg.net/img-master/img/2019/05/28/01/16/24/74939802_p0_master1200.jpg",
"original": "https://i.pximg.net/img-original/img/2019/05/28/01/16/24/74939802_p0.jpg"
},
"tags": {
"authorId": "17702579",
"isLocked": false,
"tags": [
{
"tag": "R-18",
"locked": true,
"deletable": false,
"userId": "17702579",
"romaji": null,
"userName": "amssc"
},
{
"tag": "巨乳",
"locked": true,
"deletable": false,
"userId": "17702579",
"romaji": "kyonyuu",
"translation": {
"en": "large breasts"
},
"userName": "amssc"
},
{
"tag": "母乳",
"locked": true,
"deletable": false,
"userId": "17702579",
"romaji": "bonyuu",
"translation": {
"en": "breast milk"
},
"userName": "amssc"
},
{
"tag": "lastorigin",
"locked": true,
"deletable": false,
"userId": "17702579",
"romaji": null,
"userName": "amssc"
},
{
"tag": "Last_Origin",
"locked": true,
"deletable": false,
"userId": "17702579",
"romaji": null,
"userName": "amssc"
},
{
"tag": "T-20S",
"locked": true,
"deletable": false,
"userId": "17702579",
"romaji": null,
"userName": "amssc"
},
{
"tag": "おっぱい",
"locked": false,
"deletable": false,
"romaji": "oppai",
"translation": {
"en": "breasts"
}
},
{
"tag": "라스트오리진",
"locked": false,
"deletable": false,
"romaji": null
},
{
"tag": "노움",
"locked": false,
"deletable": false,
"romaji": null
}
],
"writable": false
},
"storableTags": [
"0xsDLqCEW6",
"5oPIfUbtd6",
"zZZn32I7eS",
"NLCPvW6hqg",
"uMloBPsM69",
"4HYAnF33v5",
"Ie2c51_4Sp",
"I8DVKb4T8n",
"HAtQGc-2dA"
],
"userId": "17702579",
"userName": "amssc",
"userAccount": "amsscggy",
"userIllusts": {
"74939802": {
"illustId": "74939802",
"illustTitle": "T-20S",
"id": "74939802",
"title": "T-20S",
"illustType": 0,
"xRestrict": 1,
"restrict": 0,
"sl": 6,
"url": "https://i.pximg.net/c/250x250_80_a2/img-master/img/2019/05/28/01/16/24/74939802_p0_square1200.jpg",
"description": "JUST FOR FUN<br />现在可以做到游戏内立绘修改拉!立绘动态皮肤都可以支持,想要资助获得新技术请站内信联系我。",
"tags": [
"R-18",
"巨乳",
"母乳",
"lastorigin",
"Last_Origin",
"T-20S",
"おっぱい",
"라스트오리진",
"노움"
],
"userId": "17702579",
"userName": "amssc",
"width": 1842,
"height": 3461,
"pageCount": 2,
"isBookmarkable": true,
"bookmarkData": null
}
},
"likeData": false,
"width": 1842,
"height": 3461,
"pageCount": 2,
"bookmarkCount": 1874,
"likeCount": 843,
"commentCount": 18,
"responseCount": 0,
"viewCount": 15890,
"isHowto": false,
"isOriginal": false,
"imageResponseOutData": [],
"imageResponseData": [],
"imageResponseCount": 0,
"pollData": null,
"seriesNavData": null,
"descriptionBoothId": null,
"descriptionYoutubeId": null,
"comicPromotion": null,
"contestBanners": [],
"factoryGoods": {
"integratable": false,
"integrated": false
},
"isBookmarkable": true,
"bookmarkData": null,
"contestData": null,
"zoneConfig": {
"responsive": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=illust_responsive&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4duho1bldte0zwn&num=5d124549863"
},
"300x250": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=illust_rectangle&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4duho1bolgkimxn&num=5d124549198"
},
"500x500": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=bigbanner&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4duho1br3q3ejn9&num=5d124549470"
},
"header": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=header&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4duho1bthomvkhj&num=5d124549448"
},
"footer": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=footer&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4duho1bvuhatw9l&num=5d124549678"
},
"expandedFooter": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=multiple_illust_viewer&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4duho1by6cv5o74&num=5d124549963"
},
"logo": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=logo_side&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4duho1c0k739zyq&num=5d124549322"
}
},
"extraData": {
"meta": {
"title": "[R-18] 【巨乳】「T-20S」/「amssc」のイラスト [pixiv]",
"description": "この作品 「T-20S」 は 「R-18」「巨乳」 等のタグがつけられた「amssc」さんのイラストです。 「JUST FOR FUN现在可以做到游戏内立绘修改拉立绘动态皮肤都可以支持想要资助获得新技术请站内信联系我。」",
"keywords": "R-18,巨乳,母乳,lastorigin,Last_Origin,T-20S,おっぱい,라스트오리진,노움,イラスト,pixiv,ピクシブ",
"canonical": "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=74939802"
}
},
"noLoginData": {
"breadcrumbs": [
"日常",
"R-18"
],
"zengoIdWorks": {
"prev": {
"id": "74939801",
"title": "秋めいてるようで春にも見える"
},
"next": {
"id": "74939803",
"title": "愛言葉lll"
}
}
}
}
}

View File

@@ -0,0 +1,329 @@
{
"error": false,
"message": "",
"body": {
"illustId": "47220843",
"illustTitle": "がぶ飲みミルクティー",
"illustComment": "劇中で度々お見かけするお姿がたまらなく愛おしいのです<br />チラリズムでしょうか",
"id": "47220843",
"title": "がぶ飲みミルクティー",
"description": "劇中で度々お見かけするお姿がたまらなく愛おしいのです<br />チラリズムでしょうか",
"illustType": 0,
"createDate": "2014-11-23T06:52:00+00:00",
"uploadDate": "2014-11-23T06:52:00+00:00",
"restrict": 0,
"xRestrict": 1,
"sl": 6,
"urls": {
"mini": "https://i.pximg.net/c/48x48/img-master/img/2014/11/23/15/52/00/47220843_p0_square1200.jpg",
"thumb": "https://i.pximg.net/c/250x250_80_a2/img-master/img/2014/11/23/15/52/00/47220843_p0_square1200.jpg",
"small": "https://i.pximg.net/c/540x540_70/img-master/img/2014/11/23/15/52/00/47220843_p0_master1200.jpg",
"regular": "https://i.pximg.net/img-master/img/2014/11/23/15/52/00/47220843_p0_master1200.jpg",
"original": "https://i.pximg.net/img-original/img/2014/11/23/15/52/00/47220843_p0.jpg"
},
"tags": {
"authorId": "10589144",
"isLocked": false,
"tags": [
{
"tag": "R-18",
"locked": true,
"deletable": false,
"userId": "10589144",
"romaji": null,
"userName": "きっぷる"
},
{
"tag": "SHIROBAKO",
"locked": true,
"deletable": false,
"userId": "10589144",
"romaji": null,
"userName": "きっぷる"
},
{
"tag": "小笠原綸子",
"locked": true,
"deletable": false,
"userId": "10589144",
"romaji": "ogasawararinnko",
"userName": "きっぷる"
},
{
"tag": "ゴスロリ様",
"locked": true,
"deletable": false,
"userId": "10589144",
"romaji": "gosurorisama",
"userName": "きっぷる"
},
{
"tag": "中出し",
"locked": true,
"deletable": false,
"userId": "10589144",
"romaji": "nakadashi",
"translation": {
"en": "creampie"
},
"userName": "きっぷる"
},
{
"tag": "SHIRUPAKO",
"locked": false,
"deletable": false,
"romaji": null
},
{
"tag": "くわえたくしあげ",
"locked": false,
"deletable": false,
"romaji": "kuwaetakushiage",
"translation": {
"en": "shirt held up with the mouth"
}
},
{
"tag": "ずらし挿入",
"locked": false,
"deletable": false,
"romaji": "zurashisounyuu",
"translation": {
"en": "clothed penetration"
}
},
{
"tag": "SHIROBAKO1000users入り",
"locked": false,
"deletable": false,
"romaji": "shirobakoissennyu-za-zuiri"
},
{
"tag": "破れストッキング",
"locked": false,
"deletable": false,
"romaji": "yaburesutokkinngu",
"translation": {
"en": "torn stockings"
}
}
],
"writable": false
},
"storableTags": [
"0xsDLqCEW6",
"OFfMrDY0Rx",
"LUdsS_06nd",
"jOuNGy1xGb",
"MM6RXH_rlN",
"8MSz4vqmhj",
"G3Q8bNP7Gg",
"B_OtVkMSZT",
"0HPK64uuTz",
"jEfylbrgQX"
],
"userId": "10589144",
"userName": "きっぷる",
"userAccount": "kipples",
"userIllusts": {
"43288863": {
"illustId": "43288863",
"illustTitle": "だべの人",
"id": "43288863",
"title": "だべの人",
"illustType": 0,
"xRestrict": 0,
"restrict": 0,
"sl": 2,
"url": "https://i.pximg.net/c/250x250_80_a2/img-master/img/2014/05/04/13/05/50/43288863_p0_square1200.jpg",
"description": "",
"tags": [
"バトルスピリッツ",
"最強銀河究極ゼロ",
"マレーネ",
"CLIPSTUDIOPAINT"
],
"userId": "10589144",
"userName": "きっぷる",
"width": 648,
"height": 906,
"pageCount": 1,
"isBookmarkable": null,
"bookmarkData": null
},
"46440938": {
"illustId": "46440938",
"illustTitle": "二期で会おうぜ、ベイビー",
"id": "46440938",
"title": "二期で会おうぜ、ベイビー",
"illustType": 0,
"xRestrict": 0,
"restrict": 0,
"sl": 2,
"url": "https://i.pximg.net/c/250x250_80_a2/img-master/img/2014/10/09/10/14/37/46440938_p0_square1200.jpg",
"description": "",
"tags": [
"さばげぶっ!",
"カニ",
"ゲスかわ☆ガールズ",
"CLIPSTUDIOPAINT"
],
"userId": "10589144",
"userName": "きっぷる",
"width": 784,
"height": 1015,
"pageCount": 2,
"isBookmarkable": null,
"bookmarkData": null
},
"47220843": {
"illustId": "47220843",
"illustTitle": "がぶ飲みミルクティー",
"id": "47220843",
"title": "がぶ飲みミルクティー",
"illustType": 0,
"xRestrict": 1,
"restrict": 0,
"sl": 6,
"url": "https://i.pximg.net/c/250x250_80_a2/img-master/img/2014/11/23/15/52/00/47220843_p0_square1200.jpg",
"description": "劇中で度々お見かけするお姿がたまらなく愛おしいのです<br />チラリズムでしょうか",
"tags": [
"R-18",
"SHIROBAKO",
"小笠原綸子",
"ゴスロリ様",
"中出し",
"SHIRUPAKO",
"くわえたくしあげ",
"ずらし挿入",
"SHIROBAKO1000users入り",
"破れストッキング"
],
"userId": "10589144",
"userName": "きっぷる",
"width": 777,
"height": 1087,
"pageCount": 2,
"isBookmarkable": true,
"bookmarkData": null
},
"65079114": {
"illustId": "65079114",
"illustTitle": "あってます",
"id": "65079114",
"title": "あってます",
"illustType": 0,
"xRestrict": 0,
"restrict": 0,
"sl": 2,
"url": "https://i.pximg.net/c/250x250_80_a2/img-master/img/2017/09/22/10/40/35/65079114_p0_square1200.jpg",
"description": "",
"tags": [
"ニーアオートマタ",
"2B",
"9S",
"尻",
"尻神様",
"人類に栄光あれ",
"NieR:Automata",
"2B9S",
"ヨルハ二号B型",
"NieR1000users入り"
],
"userId": "10589144",
"userName": "きっぷる",
"width": 1171,
"height": 1447,
"pageCount": 5,
"isBookmarkable": null,
"bookmarkData": null
}
},
"likeData": false,
"width": 777,
"height": 1087,
"pageCount": 2,
"bookmarkCount": 2242,
"likeCount": 1718,
"commentCount": 12,
"responseCount": 0,
"viewCount": 85669,
"isHowto": false,
"isOriginal": false,
"imageResponseOutData": [],
"imageResponseData": [],
"imageResponseCount": 0,
"pollData": null,
"seriesNavData": null,
"descriptionBoothId": null,
"descriptionYoutubeId": null,
"comicPromotion": null,
"contestBanners": [],
"factoryGoods": {
"integratable": false,
"integrated": false
},
"isBookmarkable": true,
"bookmarkData": null,
"contestData": null,
"zoneConfig": {
"responsive": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=illust_responsive&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4lgebkzsfhdvlrs&num=5d1af27028"
},
"300x250": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=illust_rectangle&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4lgebkzvh1ugg9e&num=5d1af270873"
},
"500x500": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=bigbanner&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4lgebkzxw1ynubq&num=5d1af270762"
},
"header": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=header&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4lgebl00lfis546&num=5d1af270915"
},
"footer": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=footer&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4lgebl02yvrd3wn&num=5d1af270474"
},
"expandedFooter": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=multiple_illust_viewer&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4lgebl05avijuu5&num=5d1af270637"
},
"logo": {
"url": "https://pixon.ads-pixiv.net/show?zone_id=logo_side&format=js&s=0&up=0&ng=g&l=ja&uri=%2Fajax%2Fillust%2F_PARAM_&is_spa=1&ab_test_digits_first=5&ab_test_digits_second=5&Yuid=MjgDVlY&suid=Pg4lgebl07ypkz6k2&num=5d1af270788"
}
},
"extraData": {
"meta": {
"title": "[R-18] 【SHIROBAKO】「がぶ飲みミルクティー」/「きっぷる」のイラスト [pixiv]",
"description": "この作品 「がぶ飲みミルクティー」 は 「R-18」「SHIROBAKO」 等のタグがつけられた「きっぷる」さんのイラストです。 「劇中で度々お見かけするお姿がたまらなく愛おしいのですチラリズムでしょうか」",
"keywords": "R-18,SHIROBAKO,小笠原綸子,ゴスロリ様,中出し,SHIRUPAKO,くわえたくしあげ,ずらし挿入,SHIROBAKO1000users入り,破れストッキング,イラスト,pixiv,ピクシブ",
"canonical": "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=47220843",
"ogp": {
"description": "劇中で度々お見かけするお姿がたまらなく愛おしいのですチラリズムでしょうか",
"image": "https://s.pximg.net/www/images/pixiv_logo.gif?2",
"title": "「がぶ飲みミルクティー」/「きっぷる」[pixiv]",
"type": "article"
},
"twitter": {
"description": "劇中で度々お見かけするお姿がたまらなく愛おしいのです\r\nチラリズムでしょうか",
"image": "https://s.pximg.net/www/images/pixiv_logo.gif?2",
"title": "[R-18]がぶ飲みミルクティー",
"card": "summary"
}
}
},
"noLoginData": {
"breadcrumbs": [
"日常",
"R-18"
],
"zengoIdWorks": {
"prev": {
"id": "47220842",
"title": "優しく 終わりを告げ て"
},
"next": {
"id": "47220846",
"title": "今泉受けまとめ3"
}
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
{"duration":"180","views":3146,"video_id":"RF4Nk-S774-","rating":"4.000","ratings":"1","title":"Homegrown Big Tits","description":"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.","url":"https:\/\/www.xtube.com\/video-watch\/homegrown-big-tits-18634762","embedCode":"https:\/\/www.xtube.com\/video-watch\/embedded\/homegrown-big-tits-18634762","default_thumb":"https:\/\/cdn5-s-hw-e5.xtube.com\/m=eSuQ8f\/videos\/201302\/07\/RF4Nk-S774-\/240X180\/1.jpg","thumb":"https:\/\/cdn5-s-hw-e5.xtube.com\/m=eSuQ8f\/videos\/201302\/07\/RF4Nk-S774-\/240X180\/1.jpg","publish_date":"2013-02-07 17:41:10","tags":{"1396":"bigtits","472012":"homeg"},"thumbs":[{"width":300,"height":210,"src":"https:\/\/cdn4-s-hw-e5.xtube.com\/m=eSK08f\/videos\/201302\/07\/RF4Nk-S774-\/240X180\/1.jpg"},{"width":300,"height":210,"src":"https:\/\/cdn4-s-hw-e5.xtube.com\/m=eSK08f\/videos\/201302\/07\/RF4Nk-S774-\/240X180\/2.jpg"},{"width":300,"height":210,"src":"https:\/\/cdn10-s-hw-e5.xtube.com\/m=eSK08f\/videos\/201302\/07\/RF4Nk-S774-\/240X180\/3.jpg"}]}

View File

@@ -2333,7 +2333,7 @@ d3@^3.0.6:
resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=
date-fns@^1.27.2, date-fns@^1.30.1:
date-fns@^1.27.2:
version "1.30.1"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
@@ -4607,9 +4607,9 @@ lodash.uniq@^4.5.0:
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
log-symbols@^1.0.2:
version "1.0.2"