Today I Learned
내용
열심히 스프린트 진행중.
페이스북 앱 검수 9차 요청
또 페이스북 앱 검수 요청에 또 실패했다.. 인스타그램 댓글을 가져오기 위해 필요한 권한은 총 3가지인데, 그래도 그 중 2개까진 통과했다. instagram_basic 권한이 필요한걸 확인이 안된다는데.. 아니 인스타그램 댓글을 가져오는 기능을 보여줬는데도 모르겠다 그러면 어쩌라고…
일단 만들기
새로운 앱 서비스를 만드는데, 일단 기능만 완성하려고 열심히 함수위주로 만들고 있다. 만들면서도 이건 클래스로 잘 묶어보면 보기 좋겠다 싶은데, 구글 API Docs 읽으면서 안되는게 되게 하느라.. 일단 구현이 우선이라 생각하고 빨리 만들려고 한다. 구글 드라이브 에서 파일과 폴더를 조회하고, 내부 서브디렉토리를 조회하는 함수를 만들었다.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
def make_google_credentials(user_id: int, db: Session):
access_token, refresh_token = get_google_tokens(user_id=user_id, db=db)
creds = Credentials(
token=access_token,
refresh_token=refresh_token,
client_id=GOOGLE_CLIENT_ID,
client_secret=GOOGLE_CLIENT_SECRET,
token_uri="https://oauth2.googleapis.com/token",
)
return creds
def get_files_and_folders_from_google_drive(user_id: int, db: Session):
"""구글 드라이브에 있는 모든 파일과 폴더 목록을 가져옵니다."""
creds = make_google_credentials(user_id=user_id, db=db)
service = build("drive", "v3", credentials=creds)
result = (
service.files()
.list(pageSize=100, fields="nextPageToken, files(id, name)")
.execute()
)
items = result.get("files", [])
return items
def get_folders_from_google_drive(user_id: int, db: Session):
"""구글 드라이브에 있는 폴더 목록을 가져옵니다."""
creds = make_google_credentials(user_id=user_id, db=db)
service = build("drive", "v3", credentials=creds)
result = (
service.files()
.list(
pageSize=100,
fields="nextPageToken, files(id, name, mimeType)",
q="mimeType='application/vnd.google-apps.folder'",
)
.execute()
)
items = result.get("files", [])
return items
def get_spreadsheets_from_google_drive(user_id: int, db: Session):
"""구글 드라이브에 있는 스프레드시트 목록을 가져옵니다."""
creds = make_google_credentials(user_id=user_id, db=db)
# Google Drive API 서비스 빌드
service = build("drive", "v3", credentials=creds)
# 스프레드시트 파일만 검색
result = (
service.files()
.list(
pageSize=100,
fields="nextPageToken, files(id, name)",
q="mimeType='application/vnd.google-apps.spreadsheet'",
)
.execute()
)
items = result.get("files", [])
return items
def get_folders_in_folder_from_google_drive(folder_id: str, user_id: int, db: Session):
"""구글 드라이브에 있는 폴더의 하위 폴더 목록을 가져옵니다."""
creds = make_google_credentials(user_id=user_id, db=db)
service = build("drive", "v3", credentials=creds)
result = (
service.files()
.list(
pageSize=100,
fields="nextPageToken, files(id, name, mimeType)",
q=f"'{folder_id}' in parents and mimeType='application/vnd.google-apps.folder'",
)
.execute()
)
items = result.get("files", [])
return items
def get_spreadsheets_in_folder_from_google_drive(
folder_id: str, user_id: int, db: Session
):
"""구글 드라이브에 있는 폴더의 하위 스프레드시트 목록을 가져옵니다."""
creds = make_google_credentials(user_id=user_id, db=db)
service = build("drive", "v3", credentials=creds)
result = (
service.files()
.list(
pageSize=100,
fields="nextPageToken, files(id, name)",
q=f"'{folder_id}' in parents and mimeType='application/vnd.google-apps.spreadsheet'",
)
.execute()
)
items = result.get("files", [])
return items
def create_spreadsheet_in_folder_in_google_drive(
folder_id: str, spraedsheet_name: str, user_id: int, db: Session
):
"""구글 드라이브에 스프레드시트를 생성합니다."""
creds = make_google_credentials(user_id=user_id, db=db)
service = build("drive", "v3", credentials=creds)
file_metadata = {
"name": spraedsheet_name,
"parents": [folder_id],
"mimeType": "application/vnd.google-apps.spreadsheet",
}
file = service.files().create(body=file_metadata, fields="id").execute()
res = {
"name": spraedsheet_name,
"id": file.get("id"),
}
return res
회고
생각보다 더 빠르게 구현이 진행되고 있다!