[PR] e-zines(イージンズ) - 新しいスタイルでトレンドをお送りする無料のメールマガジン
いろいろな技術系のブログにOGP情報の取得方法が載ってるのだけれど
キュレーションサイトによって記事のOGP記述方法が様々なので自分で書いてみた
適当なファイル GetOGP.php とかにして ajax から呼ぶとほぼほぼ取得できます
取得できないサイト(記事)があったらコメントに書いてくれれば直しますYO!
GetOGP.php
<?php
try {
header('content-type: application/json; charset=utf-8');
$url = $_GET["url"];
if (isset($url) and preg_match("/^https?:/", $url)) {
$ctx = stream_context_create(array(
'http' => array(
'method' => 'GET',
'header' => 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36')
)
);
$temp = file_get_contents($url, false, $ctx);
$temp = mb_convert_encoding($temp, "UTF-8", "auto");
preg_match('/(<head|<HEAD)(.*)(head>|HEAD>)/s', $temp, $head);
$html = $head[0];
// ogp
$ogp = null;
preg_match_all("<meta\s*property=[\"']og:([^\"']+)[\"']\s*content=[\"']([^\"']+)[\"']\s*>", $html, $ogp);
for( $i = 0; $i < count($ogp[1]); $i++ ) {
$result[$ogp[1][$i]] = $ogp[2][$i];
}
$ogp = null;
preg_match_all("<meta\s*content=[\"']([^\"']+)[\"']\s*property=[\"']og:([^\"']+)[\"']\s*>", $html, $ogp);
for( $i = 0; $i < count($ogp[1]); $i++ ) {
$result[$ogp[2][$i]] = $ogp[1][$i];
}
$ogp = null;
preg_match_all("<meta\s*name=[\"']og:([^\"']+)[\"']\s*content=[\"']([^\"']+)[\"']\s*>", $html, $ogp);
for( $i = 0; $i < count($ogp[1]); $i++ ) {
$result[$ogp[1][$i]] = $ogp[2][$i];
}
// twitter
$twitter = null;
preg_match_all("<meta\s*name=[\"']twitter:([^\"']+)[\"']\s*content=[\"']([^\"']+)[\"']\s*>", $html, $twitter);
for($i = 0; $i < count($twitter[1]); $i++) {
$result2[$twitter[1][$i]] = $twitter[2][$i];
}
if (count($twitter[1]) == 0) {
preg_match_all("<meta\s*content=[\"']([^\"']+)[\"']\s*name=[\"']twitter:([^\"']+)[\"']\s*>", $html, $twitter);
for($i = 0; $i < count($twitter[1]); $i++) {
$result2[$twitter[2][$i]] = $twitter[1][$i];
}
}
if (!isset($result['title'])) {
$result['title'] = $result2['title'];
}
if (!isset($result['url'])) {
if (isset($result2['url'])) {
$result['url'] = $result2['url'];
} else {
$result['url'] = $url;
}
}
if (!isset($result['image'])) {
if (isset($result2['image:src'])) {
$result['image'] = $result2['image:src'];
} else {
$result['image'] = $result2['image'];
}
}
if (!isset($result['description'])) {
$result['description'] = $result2['description'];
}
if (!isset($result['site_name'])) {
$result['site_name'] = $result2['site'];
}
$res = [
'title' => str_replace('"', '”', $result['title']),
'url' => str_replace('http://', 'https://', $result['url']),
'image' => str_replace('http://', 'https://', $result['image']),
'description' => str_replace('"', '”', $result['description']),
'site_name' => str_replace('"', '”', $result['site_name']),
];
// success
echo json_encode($res);
} else {
// fail
echo json_encode(['status' => 'error']);
}
} catch (Exception $e) {
// fail
echo json_encode([
'status' => 'fatal error:'.$e->getMessage(),
]);
}
?>
では、また
[PR] e-zines(イージンズ) - 新しいスタイルでトレンドをお送りする無料のメールマガジン