Hola, descubrimos la respuesta a lo que andabas buscando, continúa leyendo y la verás más abajo.
Solución:
De hecho, a DriveApp le falta un getFileByUrl
(y también carpeta para el caso). Es posible que desee abrir una solicitud de mejora en el rastreador de problemas de Apps Script.
Pero lo que hago en mis guiones (ya que estos openByUrl
funciones son algo nuevas), es obtener la identificación usando una expresión regular. Me gusta esto.
function getIdFromUrl(url) return url.match(/[-w]25,/);
Esta expresión regular funciona para cualquier URL de Google que haya probado: URL de Drive para carpetas y archivos, Fusion Tables, Hojas de cálculo, Documentos, Presentaciones, etc. Simplemente busca cualquier cosa en un string que “parece” un Google key. Es decir, cualquier lo suficientemente grande string que tiene solo (google key) caracteres válidos en él.
Además, funciona incluso si recibe la ID directamente, en lugar de la URL. Lo cual es útil cuando le solicita el enlace al usuario, ya que algunos pueden pegar la identificación directamente en lugar de la URL y aún funciona.
–editar
Hay algunas otras respuestas y comentarios que abordan algunos casos extremos con los que nunca me encontré pero que podrían suceder, como tratar de obtener una identificación de carpeta en una URL de carpeta anidada, o cuando tiene un dominio de G-Suite que tiene más de 25 caracteres. Para esos casos, es posible que desee utilizar una expresión regular más estricta.
De un vistazo rápido a las sugerencias a continuación, recomiendo lo siguiente /[-w]25,$/
porque todavía es muy simple y debe abordar estos casos.
La URL es algo como esto y la identificación del archivo está presente en este patrón “/d/XXXXXXXX/” para casi todos los enlaces de GoogleDrive/Docs:
https://drive.google.com/file/d/0B3tB9BU9FRnpcTJmS2FoaktsQzA/vista
Usando la siguiente función, podemos obtener el ‘/d/fileid/’ y luego truncar ‘/d/’ desde el principio y ‘/’ desde el final.
public static string getIdFromUrl(string url)
Regex r = new Regex(@"/d/(.+)/", RegexOptions.IgnoreCase);
Match m = r.Match(url);
return m.ToString().TrimStart('/', 'd').Trim('/');
No tengo suficiente reputación para comentar sobre la respuesta aceptada, pero la respuesta aceptada de Henrique G. Abreu falla cuando una URL de Drive contiene el nombre de dominio y el nombre de dominio supera los 25 caracteres (lo descubrí por las malas 🙂
Ha sido muy confiable por lo demás y creo que es el más elegante y robusto entre los que se proporcionan aquí.
Entonces, ampliando la respuesta aceptada, la siguiente expresión regular obtendrá la última aparición de un string de caracteres de palabras o guiones que tenga al menos 25 caracteres de largo, que esté inmediatamente precedido por un carácter que no sea un carácter que no sea una palabra o un guión, y seguido opcionalmente por el mismo tipo de carácter, y cualquier otra basura que pueda aparecer en el final:
/.*[^-w]([-w]25,)[^-w]?.*/
Esto PIERDE la característica de la respuesta aceptada de que funcionará solo cuando se pase una identificación, sin embargo, ese no es un caso de uso que requiero. Funciona para todos los diferentes tipos de URL de Drive, Docs, Sheets para documentos y carpetas que he probado.
Te invitamos a estimular nuestra faena poniendo un comentario y dejando una puntuación te lo agradecemos.