구글 포토에 이미지 올리기 (nodejs)

구글 포토에 이미지를 대량으로 올리고 싶을 때

구글이 제공하는 API 를 사용하거나
웹브라우저로 직접 올려야 한다

구글 포토 API 의 단점

=======
무료로 제공하는 ‘High quality’ 옵션을 막아놨기 때문에 API 로 올리는 사진은 제한용량을 사용한다

웹브라우저로 구글 포토에 ‘High quality’ 로 올리면 제한용량을 사용하지 않는다 (2021년 5월말까지만)

웹브라우저로 파일올리기

github 에 upload-gphotos 라는 repository 가 있어서 사용해봤다

설치방법

=======

  1. repository 만들고
  2. upload-gphotos 설치하고
    1
    npm install --save upload-gphotos
  3. index.js 만들고
  4. 구글 포토의 아이디 / 비밀번호 설정하고
  5. upload 대상 폴더와 upload 후의 폴더 생성하고
  6. upload 대상 폴더에 이미지를 넣고
  7. 실행
    1
    node index.js

설정내용

index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
'use strict'
const fs = require('fs');
const libpath = require('path');
const { GPhotos } = require('upload-gphotos');
const gphotos = new GPhotos();

/**
* ! 사용자정보가 github 에 노출되지 않도록 중요정보는 환경변수로 빼세요
* * 사용자정보 입력
*/
const UPLOADDIR = 'd:/user/Downloads/gphotos';
const DONEDIR = 'd:/user/Downloads/upload_done';
const GPHOTONAME = 'GOOGLEID';
const GPHOTOPASS = 'GOOGLEPASSWORD';
const GPHOTOALBUM = 'blog-upload';

const uploadfiles = fs.readdirSync(UPLOADDIR);
for(let index=0; index < uploadfiles.length; index++) {
let file = uploadfiles[index];
let filePath = libpath.join(UPLOADDIR, file);
let destinationPath = libpath.join(DONEDIR, file);

(async () => {
await gphotos.signin({
username: GPHOTONAME,
password: GPHOTOPASS,
});

const album = await gphotos.searchAlbum({ title: GPHOTOALBUM });

const photo = await gphotos.upload({
stream: fs.createReadStream(filePath),
size: (await fs.promises.stat(filePath)).size,
filename: libpath.basename(filePath),
});

await album.append(photo);
fs.renameSync(filePath, destinationPath);
console.log(photo);
})().catch(console.error);
}

실행결과

google photo 로 자동 업로드

결론

웹브라우저 extension 으로 이미지 마우스 클릭시 구글포토로 업로드 되던 서비스들이 전부 막혔다
이젠 이런 프로그래밍 방식을 사용하는 것 밖에 없다

아니면

Imgur 를 사용하자
바로 업로드 되고 링크를 바로 블로그에서 사용할 수 있다