Sylvatica.

Back to Library

Google Drive

js 1/27/2026
10
const axios = require("axios")

async function drivedl(url) {
  try {
    const API_KEY = "AIzaSyAA9ERw-9LZVEohRYtCWka_TQc6oXmvcVU"
    
    const extractFileId = (driveUrl) => {
      const patterns = [
        /\/file\/d\/([a-zA-Z0-9_-]+)/,
        /id=([a-zA-Z0-9_-]+)/,
        /folders\/([a-zA-Z0-9_-]+)/,
        /^([a-zA-Z0-9_-]+)$/
      ]
      
      for (const pattern of patterns) {
        const match = driveUrl.match(pattern)
        if (match) return match[1]
      }
      return null
    }
    
    const fileId = extractFileId(url)
    if (!fileId) throw new Error("Invalid Google Drive URL or ID.")
    
    const { data: metadata } = await axios.get(`https://www.googleapis.com/drive/v3/files/${fileId}?key=${API_KEY}&fields=id,name,mimeType,size,webContentLink,owners,createdTime`)
    
    if (metadata.mimeType === "application/vnd.google-apps.folder") {
      const { data: list } = await axios.get(`https://www.googleapis.com/drive/v3/files?key=${API_KEY}&q='${fileId}'+in+parents&fields=files(id,name,mimeType,size,owners,createdTime)`)
      const files = list.files || []
      
      return {
        type: "folder",
        details: {
          id: metadata.id,
          name: metadata.name,
          mimeType: metadata.mimeType,
          createdTime: metadata.createdTime,
          totalFiles: files.length,
          owner: metadata.owners && metadata.owners[0] ? {
            name: metadata.owners[0].displayName,
            email: metadata.owners[0].emailAddress,
            photoLink: metadata.owners[0].photoLink
          } : null
        },
        contents: files.filter(file => !file.mimeType.includes("application/vnd.google-apps.folder")).map(file => ({
          id: file.id,
          name: file.name,
          mimeType: file.mimeType,
          size: file.size ? `${(file.size / 1024 / 1024).toFixed(2)} MB` : "N/A",
          createdTime: file.createdTime,
          downloadUrl: `https://www.googleapis.com/drive/v3/files/${file.id}?alt=media&key=${API_KEY}`
        }))
      }
    } else {
      return {
        type: "file",
        details: {
          id: metadata.id,
          name: metadata.name,
          mimeType: metadata.mimeType,
          size: metadata.size ? `${(metadata.size / 1024 / 1024).toFixed(2)} MB` : "N/A",
          createdTime: metadata.createdTime,
          owner: metadata.owners && metadata.owners[0] ? {
            name: metadata.owners[0].displayName,
            email: metadata.owners[0].emailAddress,
            photoLink: metadata.owners[0].photoLink
          } : null
        },
        downloadUrl: `https://www.googleapis.com/drive/v3/files/${metadata.id}?alt=media&key=${API_KEY}`,
        directDownload: metadata.webContentLink
      }
    }
  } catch (error) {
    throw new Error(error.message)
  }
}

module.exports = { drivedl }