본글은 PHPSCHOOL 오랜만에 들어갔다가 Tip&Tech에 유용해 보이는 정보가 있어 일단 스크랩 목적으로 글을 가져와 봅니다.
자세한 글이나, 댓글들을 보실려면 출처로 들어가 확인해보시길 추천합니다.
출처 : 구글드라이브를 이용한 OCR 기능(PHP) (https://phpschool.com/link/tipntech/82695)
=====================================
<?php
// 제가 사용하는 서버의 PHP가 구닥다리 5.2라서
// https://github.com/alchemy-fr/google-plus-api-client 여기에서 가져왔음
include "libraries/google_api/Google_Client.php";
include "libraries/google_api/contrib/Google_DriveService.php";
$client = new Google_Client();
$client->setClientId('XXXXXXXXXX.apps.googleusercontent.com');
$client->setClientSecret('XXXXXXXXXXXX');
$client->setRedirectUri('https://XXXXXXXXX/google_drive/google_drive.php');
$scope = array(
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.readonly.metadata',
'https://www.googleapis.com/auth/drive.file',
'https://www.googleapis.com/auth/drive.appdata',
'https://www.googleapis.com/auth/drive.scripts',
'https://www.googleapis.com/auth/drive.metadata',
'https://www.googleapis.com/auth/spreadsheets',
);
$client->setScopes($scope);
$client->setAccessType('offline');
// auth 토큰 유지 로직 시작 - 토큰 가져오기 방법은 각자 알아서 하세요~
// (https://github.com/googleapis/google-api-php-client 예제가 있음)
$hostname = "XXXXX";
$username = "XXXX";
$userpass = "XXXXXXX";
$dbname = "XXXXX";
$connect = mysqli_connect($hostname, $username, $userpass, $dbname);
/**
CREATE TABLE token2 (
seq INT(11) NOT NULL AUTO_INCREMENT,
type VARCHAR(255) DEFAULT NULL,
token TEXT DEFAULT NULL,
PRIMARY KEY (seq)
)
*/
$tokenquery="SELECT * FROM token2 WHERE type='original'";
$tokenresult = mysqli_query($connect,$tokenquery);
$tokenrow=mysqli_fetch_assoc($tokenresult);
if($tokenrow) {
extract($tokenrow);
}
$time_created = json_decode($token)->created;
$t=time();
$timediff=$t-$time_created;
$refreshToken = json_decode($token)->refresh_token;
if(($timediff>360)&&($token!=''))
{
$refreshquery="SELECT * FROM token2 WHERE type='refresh'";
$refreshresult = mysqli_query($connect,$refreshquery);
$refreshrow=mysqli_fetch_assoc($refreshresult);
if($refreshrow)
{
extract($refreshrow);
$refresh_created = json_decode($token)->created;
$refreshtimediff=$t-$refresh_created;
if($refreshtimediff>3600)
{
$client->refreshToken($refreshToken);
$newtoken=$client->getAccessToken();
$tokenupdate="UPDATE token2 SET token='$newtoken' WHERE type='refresh'";
mysqli_query($connect,$tokenupdate);
$token=$newtoken;
}
else
{
$client->setAccessToken($token);
}
}
else
{
$client->refreshToken($refreshToken);
$newtoken=$client->getAccessToken();
$tokenupdate="INSERT INTO token2 (type,token) VALUES ('refresh','$newtoken')";
mysqli_query($connect,$tokenupdate);
$token=$newtoken;
}
}
//if token is still good.
if(($timediff<3600)&&($token!=''))
{
$client->setAccessToken($token);
}
mysqli_close($connect);
// 여기까지 auth 토큰 유지 로직
$drive = new Google_DriveService($client);
// 업로드할 파일명
$filename = './PICK.pdf_page_1.jpg';
// 업로드할 파일의 상세정보
$title = 'test'; // 파일명
$filedata = file_get_contents($filename);
$size = getimagesize($filename);
$mimeType = $size['mime'];
$imgfile = new Google_DriveFile();
$imgfile->setTitle($title);
$imgfile->setMimeType($mimeType);
// 드라이브에 올림
$createdFile = $drive->files->insert($imgfile, array(
'ocr' => true,
'ocrLanguage' => 'kr',
'data' => $filedata,
'mimeType' => $mimeType,
));
$req = new Google_HttpRequest($createdFile->exportLinks['text/plain']);
$val = $client->getIo()->authenticatedRequest($req);
$response = $val->getResponseBody();
// Temporary Redirect The document has moved here. 페이지이므로 href만 가져온다
preg_match('/href=(["\'])([^\1]*)\1/i', $response, $m);
$req = new Google_HttpRequest($m[2]);
$val = $client->getIo()->authenticatedRequest($req);
// html태그랑 스타일 모두 제거
$response = strip_tags(preg_replace('~\<style(.*)\>(.*)\<\/style\>~', '', $val->getResponseBody()),'<p>');
// 처리가 완료된 파일은 삭제. 삭제 안하면 계속 누적되어 보기에 안 좋음
$drive->files->delete($createdFile->id);
echo nl2br($response);
?>
※ PHPSCHOOL 및 작성글에 CC정보가 없어 복사는 해왔으나 문제가 될 경우 삭제하겠습니다.
'Language > PHP' 카테고리의 다른 글
[알고리즘] 날짜 - 이번주에 시작일과 마지막일 구하기 (0) | 2009.12.08 |
---|---|
array_walk를 이용한 배열 함수 (0) | 2008.07.18 |