ちょうど先週に書いたばっかりなので。Facebook Sharing DebuggerはWebに公開済みのコンテンツしかチェックできないので困る。
異常に雑なWebアプリを作るのにPHPで秒殺できるのはよいですヾ(〃><)ノ゙ といふかoscarotero/Embed: Get info from any web service or pageを使ってるだけ。
手順
- 適当な場所を用意する
- パブリックな場所でやると、踏み台にされて面倒なのでクローズドな場所でやるといいよ
- 僕はビルトインサーバーが好きなので、それでやります
- Composerを入れる
- Composerで
embed/embed
を入れる- 独立したリポジトリでやるときは
composer require embed/embed
です - 今回は一時的な利用なので僕は
composer g require embed/embed
しました (本格的に運用するならおすすめしません)
- 独立したリポジトリでやるときは
- コードを置く (
checker.php
を下の方に用意しました) - ビルトインサーバーを起動する
php -S 0.0.0.0:3939 checker.php
コード
checker.php
<?php
// composer global require した場合
require getenv('HOME') . '/.composer/vendor/autoload.php';
// composer require した場合
// require __DIR__ . '/../vendor/autoload.php';
use Embed\Embed;
if (isset($_GET['src'])) {
header('Content-Type: text/plain');
readfile(__FILE__ );
return;
}
?>
<title>OGP Checker</title>
<meta name=”robots” content=”noindex”>
<form method="get">
<input name="url" value="<?= h((string)($_GET['url'] ?? '')) ?>"></input>
<button type="submit">submit</button>
</form>
<?php
if (empty($_GET['url']) || !is_string($_GET['url'] ?? '')) {
return;
}
?>
<hr>
<?php
$info = Embed::create($_GET['url']);
$data = [
'title' => $info->title,
'description' => $info->description,
'url' => $info->url,
'type' => $info->type,
'tags' => $info->tags,
'images' => $info->images,
'image' => $info->image,
'imageWidth' => $info->imageWidth,
'imageHeight' => $info->imageHeight,
'code' => $info->code,
'width' => $info->width,
'height' => $info->height,
'aspectRatio' => $info->aspectRatio,
'authorName' => $info->authorName,
'authorUrl' => $info->authorUrl,
'providerName' => $info->providerName,
'providerUrl' => $info->providerUrl,
'providerIcons' => $info->providerIcons,
'providerIcon' => $info->providerIcon,
'publishedDate' => $info->publishedDate,
'license' => $info->license,
'linkedData' => $info->linkedData,
'feeds' => $info->feeds,
];
?>
<details><summary>raw (展開)</summary>
<pre><?= htmlspecialchars(json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), ENT_QUOTES, 'UTF-8') ?></pre>
</details>
<table border>
<?php display($data); ?>
</table>
<?php
function h(string $s)
{
return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}
function display(array $data)
{
foreach ($data as $k => $v): ?>
<tr><th><?= h($k) ?></th><td>
<?php if (is_array($v)): ?>
<table border>
<?php display($v); ?>
</table>
<?php elseif ($k === 'url' && isset($data['mime']) && strpos($data['mime'], 'image/') === 0): ?>
<img src="<?= h($v) ?>">
<?php else: ?>
<?= h(var_export($v, 1)) ?>
<?php endif; ?>
</td>
<?php endforeach;
}
表示
まあ最低限の用は足りてるんじゃないですかね。READMEに書いてある項目を雑に出してるだけなので、もっと情報はとれるのかも。
あとは見やすくなるよう、各自よしなに。