[PHP,Ruby]Instagram Graph API
PHP
<?php function echo_json_by_filename($filename) { header("Content-Type: application/json; charset=utf-8"); if(is_readable($filename)) { readfile($filename); }else{ echo '{data:[]}'; } } $businessID = '111111'; $hashTagID = '17843677603040508';//パスタ $targetInstaUsername = isset($_GET['u']) ? $_GET['u'] : ''; $targetFileNo = isset($_GET['no']) ? $_GET['no'] : ''; $apiBaseUrl = 'https://graph.facebook.com/v5.0/'; $accessToken = 'abcdefg'; $urlForHashTag = "{$apiBaseUrl}{$hashTagID}/recent_media?user_id={$businessID}&fields=id,media_type,media_url,permalink,like_count,comments_count&limit=50&access_token={$accessToken}"; $urlForUsername = "{$apiBaseUrl}{$businessID}?fields=business_discovery.username({$targetInstaUsername}){id,followers_count,media_count,ig_id,media{caption,permalink,username,media_url,media_type,like_count,comments_count,timestamp,id}}&access_token={$accessToken}"; $urls = array($urlForHashTag,$urlForUsername); $nos = array_keys($urls); $filename = dirname(__FILE__) . "/insta{$targetFileNo}.json"; if(empty($targetInstaUsername) || !is_numeric($targetFileNo) || !in_array($targetFileNo,$nos)){ echo_json_by_filename($filename); exit; } if(file_exists($filename)){ $t = filemtime($filename); if($t === false || abs($t - time()) < 60){ echo_json_by_filename($filename); exit; } if(unlink($filename) === false){ echo_json_by_filename($filename); exit; } } $data = file_get_contents($urls[$targetFileNo]); file_put_contents($filename,$data); header("Content-Type: application/json; charset=utf-8"); echo $data;
Ruby
#!/Ruby23-x64/bin/ruby # coding: utf-8 ENV['SSL_CERT_FILE'] = File.expand_path('/cert/cacert.pem') require "cgi" require "net/https" require "uri" require "date" def echo_json_by_filename(filename) puts "Content-Type: application/json; charset=utf-8\n\n" if File.exist?(filename) then File.open(filename, "r") do |f| puts f.read end else puts "{data:[]}" end end cgi = CGI.new businessID = "111111" hashTagID = "17843677603040508"#パスタ targetInstaUsername = cgi["u"] targetFileNo = cgi["no"] apiBaseUrl = "https://graph.facebook.com/v5.0/" accessToken = "abcdefg" urlForHashTag = apiBaseUrl + hashTagID + "/recent_media?user_id="+businessID+"&fields=id,media_type,media_url,permalink,like_count,comments_count&limit=50&access_token=" + accessToken urlForUsername = apiBaseUrl + businessID + "?fields=business_discovery.username("+targetInstaUsername+"){id,followers_count,media_count,ig_id,media{caption,permalink,username,media_url,media_type,like_count,comments_count,timestamp,id}}&access_token=" + accessToken filename = "./insta"+targetFileNo+".json" if targetInstaUsername.empty? || targetFileNo.empty? then echo_json_by_filename(filename) exit end if File.exist?(filename) then gap = DateTime.now.to_time - File.mtime(filename) if gap < 60 then echo_json_by_filename(filename) exit end File.delete(filename) end uri = URI.parse urlForUsername http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true req = Net::HTTP::Get.new uri.request_uri res = http.request req file = File.open(filename,"w") file.puts(res.body) puts "Content-Type: application/json; charset=utf-8\n\n" puts res.body exit