Coletar todos os comentários de um projeto

Visão geral

O extrator de comentários recuperará todos os ativos de um projeto, extrairá os comentários e os exportará para um arquivo .csv.Este tutorial usa os seguintes recursos:

  • SDK do Python — O SDK cuida da paginação para você e configura um cliente que você pode usar com tokens de desenvolvedor (autenticação bearer).
  • Extrator de comentários em Python — O exemplo de código que estamos usando está aqui.

Experimentar no Glitch

O Glitch é uma ferramenta simples que permite que você configure seus próprios aplicativos e os teste e execute usando os servidores deles.Se você não estiver familiarizado com o Glitch, confira nosso guia sobre Como usar o Glitch.Se você quiser ver o extrator de comentários em ação em um servidor, temos um aplicativo Flask configurado no Glitch: Extrator de comentários do Frame.io em Python.

Escopos obrigatórios

Antes de começar este guia, você precisará se certificar de que possui um token que inclua, no mínimo, os seguintes escopos:

EscopoMotivo
Projetos: LeituraNão é estritamente obrigatório, mas é necessário para obter o root_asset_id de um projeto.
Ativos: LeituraNecessário para navegar pelos asset_ids via API
Comentários: LeituraNecessário para recuperar os próprios comentários.

1. Preparar seu aplicativo

Este guia seguirá um padrão semelhante ao de Como ler a árvore de arquivos. Portanto, para começar, você precisará de:

Você também vai precisar importar o FrameioClient para o seu aplicativo em Python, bem como algumas bibliotecas auxiliares adicionais:

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

2. Rastrear o projeto

Agora, você precisará recuperar recursivamente todos os ativos, verificar se eles contêm comentários e armazenar todos os ativos com comentários em uma lista a partir da qual você poderá criar seu arquivo .csv.

À medida que rastreia o projeto, você precisará realizar as seguintes verificações em cada ativo:

  • O ativo é um arquivo?(&quot;_type&quot;: &quot;file&quot;).

  • Se for um arquivo, ele possui comentários?* Se sim, recupere-os e adicione-os à sua lista.

  • O ativo é uma pasta?(&quot;_type&quot;: &quot;folder&quot;)

  • Se for uma pasta, faça uma pesquisa recursiva em suas tarefas derivadas.

  • O ativo é uma pilha de versões?(&quot;_type&quot;: &quot;version_stack&quot;)

  • Se for uma pilha de versões, obtenha todas as tarefas derivadas e verifique se há comentários.

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
Não se esqueça de paginar

O exemplo acima ignora a paginação, mas, ao navegar por coleções grandes, você não deve fazer isso!Consulte nosso guia de Conceitos principais para referência.

3. Simplificar sua lista de comentários

A menos que você já tenha feito isso durante o rastreamento, é recomendável simplificar sua lista para facilitar o processamento.

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. Filtre a lista e crie seu arquivo .csv

Quando sua lista estiver simplificada, você pode usar a compreensão de lista para extrair os elementos de cada comentário que considerar úteis e depois exportá-los para um arquivo .csv.Recomendamos incluir, no mínimo:

  • Comentário — text
  • ID principal — parent_id
  • ID do ativo — asset_id
  • Nome do ativo — name
  • ID do proprietário — owner_id
  • Email do proprietário — owner.email
  • Carimbo de data e hora — timestamp
  • Atualizado em — updated_at

Depois de criar uma nova lista contendo os dados que você deseja para cada ativo na sua saída final, é hora de gravar no seu arquivo .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)

E pronto!Agora você tem um arquivo .csv com os comentários simplificados de todo um projeto do Frame.io.