add id loader

This commit is contained in:
t0is 2025-04-02 04:41:29 +02:00
parent 641d3ed37c
commit ee56aa0008
6 changed files with 127 additions and 2 deletions

View File

@ -1,3 +1,9 @@
networks:
mariadb:
external: true
name: mariadb
services:
drive-sync:
image: t0is/transcriptor-gdrive-sync:latest
@ -5,4 +11,14 @@ services:
# Set your target Google Drive folder ID here.
- DRIVE_FOLDER_ID=1qjq9XEC19g6LGw6fwcZXSQYgOO2YuAOA
volumes:
- /shared/transcriptor/clips:/shared/transcriptor/clips
- /shared/transcriptor/clips:/shared/transcriptor/clips
drive-id-loader:
image: t0is/transcriptor-gdrive-sync:id_loader
environment:
# Set your target Google Drive folder ID here.
- DRIVE_FOLDER_ID=1qjq9XEC19g6LGw6fwcZXSQYgOO2YuAOA
volumes:
- /shared/transcriptor/clips:/shared/transcriptor/clips
networks:
- mariadb

View File

@ -0,0 +1,18 @@
FROM python:3.9-slim
WORKDIR /app
# Install required system packages including MariaDB development headers and gcc
RUN apt-get update && \
apt-get install -y curl rclone bash unzip libmariadb-dev gcc && \
rm -rf /var/lib/apt/lists/*
# Copy requirements file (if you have one) and install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir mariadb
# Copy application code, the entrypoint script, and channels.json
COPY gdrive_id_loader.py .
COPY rclone.conf /root/.config/rclone/rclone.conf
# Default command
CMD ["python", "-u", "gdrive_id_loader.py"]

90
gdrive_id_loader.py Normal file
View File

@ -0,0 +1,90 @@
import os
import subprocess
import re
import sys
import mariadb
# Configuration update these values as needed.
LOCAL_DIR = "/shared/transcriptor/clips" # Local folder where clips are stored
REMOTE_NAME = "gdrive" # rclone remote name for Google Drive
# Connect to the MariaDB database
try:
conn = mariadb.connect(
host=os.environ.get("DB_HOST", "192.168.0.187"),
user=os.environ.get("DB_USER", "t0is"),
password=os.environ.get("DB_PASS", "Silenceisgolden555"),
database=os.environ.get("DB_NAME", "transcriptor"),
port=int(os.environ.get("DB_PORT", 3306))
)
cursor = conn.cursor()
except mariadb.Error as e:
print(f"Error connecting to MariaDB: {e}")
sys.exit(1)
def get_rclone_link(relative_path):
"""
Uses rclone to generate a shareable link for the file at the given relative path.
"""
remote_path = f"{REMOTE_NAME}:{relative_path}"
try:
result = subprocess.run(
["rclone", "link", remote_path],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
check=True
)
return result.stdout.strip()
except subprocess.CalledProcessError as e:
print(f"Error obtaining rclone link for {remote_path}: {e.stderr}")
return None
def extract_file_id(link):
"""
Extracts the Google Drive file ID from the shareable URL.
Expected URL format: https://drive.google.com/file/d/FILE_ID/view?usp=sharing
"""
match = re.search(r"/d/([^/]+)/", link)
if match:
return match.group(1)
return None
def update_database(filename, file_id):
"""
Updates the clips table in the database with the provided Google Drive file ID.
This example uses the base name of the file to match the record.
Adjust the query as needed for your schema.
"""
base = os.path.basename(filename)
query = "UPDATE clips SET gdrive_file_id = ? WHERE filename LIKE ?"
like_pattern = f"%{base}%"
try:
cursor.execute(query, (file_id, like_pattern))
conn.commit()
print(f"Updated {base} with file_id: {file_id}")
except mariadb.Error as e:
print(f"Database update failed for {base}: {e}")
def main():
# Walk through the local directory recursively
for root, dirs, files in os.walk(LOCAL_DIR):
for file in files:
full_path = os.path.join(root, file)
# Compute the relative path to preserve folder structure in the remote
rel_path = os.path.relpath(full_path, LOCAL_DIR)
print(f"Processing file: {full_path} (relative: {rel_path})")
link = get_rclone_link(rel_path)
if link:
file_id = extract_file_id(link)
if file_id:
update_database(rel_path, file_id)
else:
print(f"Could not extract file ID from link: {link}")
else:
print(f"No link generated for file: {full_path}")
if __name__ == "__main__":
main()
cursor.close()
conn.close()

View File

@ -3,6 +3,6 @@ type = drive
client_id = 830644885820-9792hiic15cmglcbjg5nl210im3m7m6r.apps.googleusercontent.com
client_secret = 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
scope = drive
token = {"access_token":"ya29.a0AeXRPp6RfjrFgD1T1RpH5lMnj9sUc55ePQo0THDsX5OCagZ-u7NXcu0scNuBBvzim9lUvhi8L0x4UQ2g9HuvfdTnP8ydd3T00PxK89pXFUdRMKKajDHIAJw2Upg8d-dtZQnLPjERyqNtx6sls5DJxM7i2l4Ezg2utctrAlf5aCgYKAaASARMSFQHGX2MiE4vJaQGY_rrfT5oXAtwVoA0175","token_type":"Bearer","refresh_token":"1//09gDVl-tGofbeCgYIARAAGAkSNwF-L9IrXic-IxKKryOSicpnI8nX-lzEfe43dcgiCQ4f4KPnQqzSi3VfDHQ5vSqziAJGlQgjw3k","expiry":"2025-03-21T16:39:18.807206+01:00"}
token = {"access_token":"ya29.a0AeXRPp5DaLsik9K5sYbr-xRi89lGpkpum_lk74JvBA5ua9DusiFfIVxxBqEjvMlRBmBrRQHx31a4TzQ51GsQQBKnObJPPDNKzTb7KXhOLzAGjT0zBITzQ9K2-ystJNfKv1nMGfDiVje11iOvp3UsynFcBjJj2CS4Qp8rJgqLaCgYKAcASARMSFQHGX2MiykOVhvsUmJ8n1S1TqaOskg0175","token_type":"Bearer","refresh_token":"1//098qddus5NnV-CgYIARAAGAkSNwF-L9Ir4Pm0HUGMFopHsJ4yxSfM1-jjIXaU0AhOyYFriHmf7qVsVPQ6Mxm1ZB5NhcAPiSUp9t4","expiry":"2025-04-01T18:10:24.926353+02:00"}
team_drive =

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
mariadb