// 기본적으로 무료이지만 데이터 조회 수가 많다면 유료 이용을 추천한다.
// 유료이용을 위해서는 developer dashboard 에서 카드등록이 먼저 되어있어야 가능하다.
// API를 이용하여 추출한 이미지 URL을 이용하여 이미지 노출 시 "NOT SAME ORIGIN" 에러 노출
// 이미지를 다운받은 후 불러와야 이미지 노출이 가능하다.
// https://rapidapi.com/restyler/api/instagram40
// 아래 zip 파일을 받은 후 압축을 풀면 sql 파일도 확인 가능합니다.
// 그누보드 기반으로 제작했다.
// URL을 이용한 이미지 파일 다운 받기
<?php
function save_api_photo($init_name, $url, $dir) {
$filename = '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec ($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//echo $http_code."<br><br>";
if($http_code == 200) {
$tmpname = $init_name;
$filepath = "./data/file/instafeed/";
// 파일 다운로드
$path = $filepath.'/'.$tmpname;
//echo $path."<br><br>";
$fp = fopen ($path, 'w');
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false );
curl_setopt( $ch, CURLOPT_BINARYTRANSFER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt( $ch, CURLOPT_FILE, $fp );
curl_exec( $ch );
curl_close( $ch );
fclose( $fp );
// 다운로드 파일이 이미지인지 체크
// if(is_file($path)) {
// $size = @getimagesize($path);
// if($size[2] < 1 || $size[2] > 3) {
// @unlink($path);
// $filename = '';
// } else {
// $ext = array(1=>'gif', 2=>'jpg', 3=>'png');
// $filename = $tmpname.'.'.$ext[$size[2]];
// rename($path, $filepath.'/'.$filename);
// }
// }
}
//return $filename;
}
$sql = "select f_datetime from g5_insta_feed order by idx limit 1 ";
$rowf = sql_fetch($sql);
//echo date("Ymd")-$rowf['f_datetime'];
if(date("Ymd")-$rowf['f_datetime']>14){
// 2주마다 1번씩 업데이트 (매번 가져오는 것을 방지)
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://instagram40.p.rapidapi.com/account-feed?username=chir2005_",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-rapidapi-host: instagram40.p.rapidapi.com",
"x-rapidapi-key: d2c5ef378amsh6648c6f70ef1c52p1a4975jsne9ec82a215aa",
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
$result_feed = json_decode($response,true);
curl_close($curl);
if ($err) {
//echo "cURL Error #:" . $err;
}else{
if(count($result_feed)>0) {
$sql = sql_query("delete from g5_insta_feed ");
for ($a2 = 0; $a2 < count($result_feed); $a2++) {
//print_r($result_feed[$a2]['node']);
//echo '<br><br>';
$shortcode = $result_feed[$a2]['node']['shortcode'];
$thumbnail_src = $result_feed[$a2]['node']['thumbnail_src'];
$init_name = "instafeed".$a2.".jpg";
$dirname = "../../data/file/instafeed/";
$f_datetime = date("Ymd");
// file_name 변수 실제 사용 안함
$file_name = save_api_photo($init_name, $thumbnail_src, $dirname);
$sql = sql_query("insert into g5_insta_feed set init_name='{$init_name}', dirname='{$dirname}', thumbnail_src='{$thumbnail_src}', shortcode='{$shortcode}', f_datetime='{$f_datetime}' ");
//echo $init_name."<br><br>";
//echo $thumbnail_src."<br><br>";
}
}
}
}
?>
// DB에서 feed data 조회
$sql2 = "select * from g5_insta_feed order by idx desc";
$result2 = sql_query($sql2);
$cnt2 = sql_num_rows($result2);
'웹 개발 이야기 > php' 카테고리의 다른 글
[PHP] 스팸글 등록 방지를 위한 아주 간단한 방법 (0) | 2023.03.13 |
---|---|
[PHP] calendar_basic (0) | 2023.03.09 |
[PHP] 그누보드 자동 로그인 풀릴 때 (0) | 2023.03.09 |
[PHP] 텍스트자르고 말줄임표 붙이기 (0) | 2023.03.08 |
[PHP] 파일 업로드 (0) | 2023.03.08 |
댓글