Recopilar todos los comentarios de un proyecto

Información general

El extractor de comentarios recuperará todos los activos de un proyecto, extraerá los comentarios y los exportará en un archivo .csv. Esta descripción detallada utiliza los siguientes recursos:

  • SDK de Python: El SDK gestiona automáticamente la paginación y configura un cliente que puede usar con tokens de desarrollador (autenticación de portador).
  • El extractor de comentarios en Python: La muestra de código que estamos usando está aquí.

Probarlo en Glitch

Glitch es una herramienta sencilla que le permite configurar sus propias aplicaciones, así como probarlas y ejecutarlas usando sus servidores. Si no está familiarizado con Glitch, consulte nuestra guía sobre el uso de Glitch. Si quiere ver cómo funciona el extractor de comentarios en un servidor, tenemos una aplicación Flask configurada en Glitch: Extractor de comentarios de Frame.io en Python.

Ámbitos necesarios

Antes de comenzar a leer esta guía, asegúrese de tener un token que incluya al menos los siguientes ámbitos:

ÁmbitoMotivo
Proyectos: LecturaNo es estrictamente necesario, pero sí para recuperar el root_asset_id de un proyecto.
Activos: LecturaNecesario para navegar por asset_ids a través de la API.
Comentarios: LecturaNecesario para recuperar los comentarios.

1. Preparar su aplicación

Esta guía seguirá un patrón similar al de Leer el árbol de archivos. Por consiguiente, para empezar, necesitará:

También debe importar el FrameioClient en su aplicación Python, así como algunas bibliotecas auxiliares adicionales:

Python
1from frameioclient import FrameioClient
2import requests, json, csv, itertools
3
4ROOT_ASSET_ID = "<ROOT_ASSET_ID>"
5TOKEN = "<DEV_TOKEN>"

2. Rastrear el proyecto

Ahora, necesitará recuperar de forma recursiva todos los activos, comprobarlos para ver si tienen comentarios y almacenar cualquier activo comentado en una lista desde la cual puede construir su archivo .csv.

Durante el rastreo su proyecto, necesitará hacer las siguientes comprobaciones en cada activo:

  • ¿Es el activo un archivo? (&quot;_type&quot;: &quot;file&quot;).

* Si es un archivo, ¿tiene comentarios? * Si los tiene, recupérelos y añádalos a su lista.

  • ¿Es el activo una carpeta? (&quot;_type&quot;: &quot;folder&quot;)

Si es una carpeta, entonces rastree sus elementos secundarios.

  • ¿Es el activo una pila de versiones? (&quot;_type&quot;: &quot;version_stack&quot;)

Si lo es, obtenga todos los elementos secundarios y compruebe si hay comentarios.

Python
1def all_comments(client, asset_id, comment_list):
2 files = client.get_asset_children(asset_id)
3
4 for asset in files:
5 if asset['type'] == "file":
6 if asset['comment_count'] > 0:
7 asset_parent_id = asset['parent_id']
8 asset_name = asset['name']
9 comments = client.get_comments(asset['id'])
10 my_comment_list = [comment for comment in comments.results]
11 for object in my_comment_list:
12 object.update({'parent_id':asset_parent_id})
13 object.update({'name':asset_name})
14 comment_list.append(my_comment_list)
15
16 if asset['type'] == "folder":
17 if asset['item_count'] > 0:
18 all_comments(client, asset['id'], comment_list)
19
20 if asset['type'] == "version_stack":
21 asset_name = asset['name']
22 parent_id = asset['parent_id']
23 vfiles = client.get_asset_children(asset['id'])
24
25 for asset in vfiles.results:
26 asset_name = asset['name']
27 parent_id = asset['parent_id']
28 if asset['type'] == "file":
29 if asset['comment_count'] > 0:
30 comments = client.get_comments(asset['id'])
31 my_comment_list = [comment for comment in comments.results]
32 for object in my_comment_list:
33 object.update({'parent_id':parent_id})
34 object.update({'name':asset_name})
35 comment_list.append(my_comment_list)
36
37def get_all_project_comments(root_asset_id, token):
38 comment_list = []
39 client = FrameioClient(token)
40
41 all_comments(client, root_asset_id, comment_list)
42
43 return comment_list
No olvide paginar

En el ejemplo anterior se ignora la paginación, pero cuando gestione colecciones grandes, no debería hacerlo. Consulte nuestra guía Conceptos clave para obtener referencias.

3. Aplanar su lista de comentarios

A menos que haya gestionado esto durante su rastreo, lo ideal es que su lista sea plana para facilitar el procesamiento.

Python
1# The response list comes back as a list of lists.
2# Flatten out responses to a single list so you can build your .csv file.
3
4flat_response_list = list(itertools.chain.from_iterable(responses))

4. Depurar la lista y crear su .csv

Cuando su lista sea plana, puede usar la comprensión de listas para obtener los elementos de cada comentario que crea que es útil, y luego exportarlos a un archivo .csv. Recomendamos tener al menos:

  • Comentario: text
  • ID principal: parent_id
  • ID de activo: asset_id
  • Nombre del activo: name
  • ID del propietario: owner_id
  • Correo electrónico del propietario: owner.email
  • Marca de tiempo: timestamp
  • Actualizado el: updated_at

Cuando haya creado una lista nueva que contenga el resultado que desea por activo para su resultado final, llega el momento de escribir en su archivo .csv.

Python
1list_for_csv = [[o['text'], o['parent_id'], o['asset_id'], o['name'], o['owner_id'], o['owner']['email'], o['timestamp'], o['updated_at']] for o in flat_response_list]
2
3# Let's write our new list out to a .csv file. We'll add a heading.
4with open("output.csv", 'w') as myfile:
5 wr = csv.writer(myfile, dialect='excel')
6 wr.writerow(['Comment', 'Parent ID', 'Asset ID', 'Asset Name', 'Owner ID', 'Email', 'Timestamp', 'Updated At'])
7 wr.writerows(list_for_csv)

Eso es todo. Ahora tiene un archivo .csv con los comentarios planos de todo un proyecto de Frame.io.