<?php
/**
* curlでapiを取得
* @param $url
* @return bool|string
*/
function file_get_contents_curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
/**
* 階層をもつfile_put_contents
* @param $dir
* @param $contents
*/
function file_force_contents($dir, $contents){
$parts = explode('/', $dir);
$file = array_pop($parts);
$dir = '';
foreach($parts as $part)
if(!is_dir($dir .= "/$part")) mkdir($dir);
file_put_contents("$dir/$file", $contents, LOCK_EX);
}
/**
* apiのキャッシュ
* @param $url
* @param string $cache_dir
* @param int $life_time
* @return bool|false|string|null
*/
function get_cache_contents($url, $cache_dir = './cache', $life_time = 86400)
{
$api = null;
if (file_exists($cache_dir) && filemtime($cache_dir) + $life_time > time()) {
$api = file_get_contents($cache_dir);
} else {
$api = file_get_contents_curl($url);
file_force_contents($cache_dir, $api);
}
return $api;
}
/**
* Facebook Graph APIの取得
* @param $opt
* @return mixed
*/
function get_facebook_graph_api($opt) {
$url = "https://graph.facebook.com/v5.0/{$opt['business_id']}?fields=name%2Cmedia.limit({$opt['limit']})%7Bcaption%2Clike_count%2Cmedia_url%2Cpermalink%2Ctimestamp%2Cusername%7D&access_token={$opt['access_token']}";
$src = get_cache_contents($url);
$api_array = json_decode($src, true);
return $api_array['media']['data'];
}
/*
======↑ここまで汎用↑======
======↓ここからサイトごとに変更必要↓======
*/
/**
* Instagram Feedの取得
* @param $opt
* @return string|null
*/
function get_instagram_feed_src($id) {
$opt = [
"business_id" => $id,
"limit" => 9,
"access_token" => "access_token_wo_iretene"
];
$items = get_facebook_graph_api($opt);
$src = null;
foreach ($items as $item) {
$format = '<div><a href="%s" target="_blank"><img src="%s" alt=""></a></div>';
$src .= sprintf($format, $item['permalink'], $item['media_url']);
}
return $src;
}