본글은 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정보가 없어 복사는 해왔으나 문제가 될 경우 삭제하겠습니다.

+ Recent posts