Bagaimana cara mengumpulkan statistik komentar halaman dalam Confluence?
Ya, dan mengapa ini diperlukan?

Kenapa dan mengapa
Dalam proyek di mana saya kebetulan bekerja, proses persiapan dan persetujuan persyaratan berikut lahir:
- Confluence digunakan untuk dokumentasi.
- Tim pemasok menyiapkan deskripsi proses bisnis dan langkah-langkah mereka dalam bentuk halaman terpisah sesuai dengan templat.
- Sekali seminggu, sejumlah deskripsi yang telah disiapkan diserahkan kepada pelanggan untuk proofreading.
- Tim pelanggan meninggalkan semua pertanyaan dan tambahan pada halaman terkait dalam bentuk komentar bawaan.
- Dan tim pemasok melengkapi konten, merespons komentar, memperbaiki pertanyaan untuk studi tambahan.
- Jika pertanyaan dijawab dan konten diperbarui atau tugas untuk belajar diperbaiki, tim pelanggan harus menutup komentar.
- Pertanyaan pada kumpulan dokumen dari minggu ini harus ditutup pada saat batch berikutnya ditransfer minggu depan.
Setiap minggu, manajer proyek memiliki tugas untuk memahami seberapa banyak kumpulan dokumen yang dikirimkan telah berhasil dan apa yang dapat dianggap siap secara kondisional darinya. Dan peserta tim pemasok secara berkala perlu memeriksa status komentar pada dokumen mereka dan bekerja dengan sengaja bersama yang lain. Tetapi bagaimana cara menemukannya? Anda dapat membuka setiap halaman, mencari komentar pertama dengan mata Anda (atau dengan bantuan
trik kecil ), lalu klik semua komentar, karena tim pelanggan tidak terburu-buru untuk menutupnya, pikirkan masing-masing dan periksa jawabannya.
Batch mingguan berisi 50-100 halaman terpisah, dan melakukan ini dengan tangan Anda adalah pekerjaan yang sangat banyak. Dan jika Anda masih mencoba mengumpulkan argumen untuk meyakinkan pihak lain, itu menjadi sangat menyedihkan. Dan ada juga komentar menggantung yang dihasilkan dari pengeditan halaman yang tidak akurat ketika teks sumber terhapus secara tidak sengaja. Komentar semacam itu terlihat di yang diselesaikan, tetapi tidak dapat dibuka kembali (Anda bisa, jika Anda membuat ulang penanda yang tidak terlihat dalam teks halaman).
Pencarian alat tidak berhasil. Selain itu, Confluence digunakan di sisi pelanggan, Anda tidak dapat menginstal plugin, belum lagi membeli. Tidak ada keahlian pengembangan makro.
Pada titik tertentu, saya ingat Confluence
REST API dan pengalaman sebelumnya menggunakan
Jira API yang serupa. Pencarian dan percobaan dengan fungsi panggilan dari browser menunjukkan bahwa Anda bisa mendapatkan komentar dan propertinya. Selanjutnya, Anda harus memilih alat untuk otomatisasi, dan Anda dapat mulai menyelesaikannya. Saya memiliki beberapa pengalaman membuat skrip pada alat yang lebih cenderung lebih dekat dengan administrator seperti Bash, Perl, JScript. Saya bukan pengembang, saya tidak punya alat yang akrab atau akrab. Saya ingin mencoba sesuatu yang lebih umum atau cocok. Kemudian saya menemukan
pembungkus untuk API Python dan memutuskan untuk mencobanya.
Prinsip umum
Masalahnya dirumuskan sebagai berikut. Anda perlu menemukan semua halaman yang terkait dengan pengiriman mingguan tertentu. Kumpulkan komentar pada mereka dalam daftar: halaman, tautan ke komentar, penulis dan tanggal komentar, teks sumber pada halaman, komentar dan jawaban, penulis dan tanggal balasan terakhir, status komentar. Selain itu, kumpulkan statistik untuk setiap halaman, jumlah total komentar, berapa banyak bahaya, berapa banyak yang terbuka. Simpan semuanya di halaman statistik khusus.
Saya meletakkan Python, melihat dasar-dasar bekerja dengannya, dan mari kita pergi. Pertama, buat koneksi:
from atlassian import Confluence UserLogin = 'xxxxxx'
Untuk mencari halaman dari kumpulan mingguan, saya memutuskan untuk menggunakan tag. Cara menyampaikannya secara massal adalah tugas yang terpisah.
page_label = 'week123' cql = 'space.key={} and label = "{}" and type = page ' 'ORDER BY title '.format('YYY', page_label) pages = confluence.cql(cql, expand=None, start=0, limit=200)
Jadi kami punya daftar halaman untuk diperiksa. Selanjutnya, kami mulai memproses setiap halaman individual. Kami mengumpulkan dari datanya di komentar dengan parameter mereka. Berdasarkan data ini, kami membangun statistik tentang berapa banyak komentar yang ada di halaman dan dalam kondisi apa. Selanjutnya, kami menghapus hasil untuk semua halaman dan mulai memformat hasilnya. Kami membuat isi halaman dengan hasil dalam bentuk tabel statistik dan daftar rinci komentar terbuka.
Pemrosesan Daftar Halaman statistics = [] open_comments = []
Fitur API
Sekarang mari kita cari tahu cara memproses halaman. Secara default, API hanya mengembalikan informasi dasar, seperti pengidentifikasi atau nama halaman. Semua properti tambahan harus ditentukan secara eksplisit. Mereka dapat dilihat dengan menganalisis hasil panggilan. Data tambahan dapat ditemukan di bagian atau subbagian dari _expandable. Kami menambahkan item yang diinginkan untuk diperluas dan melihat lebih jauh hingga kami menemukan data yang diperlukan.
Contoh Masalah http://wiki.xxxxxx/rest/api/content/101743895?expand=body,children.comment { "id": "97517865", "type": "page", "status": "current", "title": "w2019-47 comments status", "children": { "comment": { "results": [], "start": 0, "limit": 25, "size": 25, "_links": {} }, "_links": {}, "_expandable": { "attachment": "/rest/api/content/97517865/child/attachment", "page": "/rest/api/content/97517865/child/page" } }, "body": { "_expandable": { "editor": "", "view": "", "export_view": "", "styled_view": "", "storage": "", "anonymous_export_view": "" } }, "extensions": { "position": "none" }, "_links": {}, "_expandable": { "metadata": "", "operations": "", "restrictions": "/rest/api/content/97517865/restriction/byOperation", "history": "/rest/api/content/97517865/history", "ancestors": "", "version": "", "descendants": "/rest/api/content/97517865/descendant", } }
Dan ada juga batasan jumlah hasil yang dikeluarkan, pagination. Ini dikonfigurasikan di sisi server (API?) Dan dalam kasus kami ini adalah 25. Untuk beberapa permintaan, itu dapat diubah dengan menetapkan secara eksplisit, tetapi hanya akan berfungsi untuk tingkat atas. Dan mengungkap komentar ke halaman, kami mendapatkan semua yang sama hanya 25, sementara ukuran juga palsu. Dalam contohnya ada 29 dalam kenyataan. Kami berhasil menghindari pagination komentar menggunakan fungsi terpisah dalam modul Confluence - get_page_comments dengan kemampuan untuk menentukan ukuran halaman.
Jebakan berikutnya menunggu dalam fitur pelestarian dan penerbitan karakter khusus. Isi halaman atau komentar dapat diperoleh dalam beberapa tampilan: XML internal - penyimpanan, HTML perantara tanpa output makro - tampilan dan HTML dengan output makro - export_view. Tapi judul judul halaman dan teks asli yang dikomentari. Pemilihan selalu dikeluarkan dalam bentuk yang sesuai untuk dibaca. Karena di masa mendatang, data ini termasuk dalam tubuh laman dengan statistik, kemudian beberapa karakter menyebabkan kesalahan konversi. Saya harus menulis prosedur penggantian di atas.
Komentar Halaman
Sekarang untuk mem-parsing halaman. Ini adalah salah satu prosedur yang memuat halaman, mengumpulkan datanya, lalu mengeluarkan daftar komentar dengan jawaban dan mengumpulkannya dalam korespondensi. Hasilnya adalah daftar kamus, di mana setiap elemen daftar sesuai dengan satu komentar dengan jawaban. Dan semua atribut dari komentar ini terletak pada bidang kamus yang sesuai.
Pemrosesan satu halaman def page_comments_data(page_identifier):
Statistik dan tabel
Untuk kejelasan penyajian data, kami mengumpulkan statistik dan mengaturnya dalam bentuk tabel.
Kami memproses statistik def page_statistics(comments_data): open_count = 0 dang_count = 0 comment_count = len(comments_data) if comment_count > 0: for comment in comments_data:
Untuk membuat data dalam bentuk tabel, kami akan melakukan prosedur lain. Ini membentuk kode HTML dari tabel dari daftar kamus, karena pos itu menambahkan baris dari nama-nama kunci kamus dan menambahkan kolom dengan nomor baris.
def create_table(tab_data): tab_start = '<table style="width: 100.00%;"><colgroup><col />' '<col /></colgroup><tbody>' tab_end = '</tbody></table>' tab_code = tab_start + '<tr>' row_num = 1 if len(tab_data) > 0: tab_code += '<th>Num</th>' for key in tab_data[0].keys(): tab_code += '<th>{}</th>'.format(key) tab_code += '</tr>' for row in tab_data: tab_code += '<tr><td>{}</td>'.format(row_num) row_num += 1 for field in row.values(): tab_code += '<td>{}</td>'.format(field) tab_code += '</tr>' tab_code += tab_end + '\n' return tab_code
Sekarang semuanya sudah siap. Setelah memberi label dan menjalankan skrip, kami mendapatkan halaman yang terlihat seperti ini:

PS
Tentu saja, ini tidak semuanya ternyata pada akhirnya. Ada parsing halaman dan mencari makro dengan nomor tugas di Jira. Ada pelabelan otomatis berdasarkan nomor tugas di Jira dan tautan dari mereka ke Confluence. Ada perbandingan dan verifikasi daftar pengiriman mingguan. Ada penghematan komentar di Excel dan pengumpulan data umum dari beberapa file Excel mingguan. Dan komentar parsing dari Word baru-baru ini telah ditambahkan.