[SHELL] Bash-скрипт для создания гибкой аналитики ваших постов в пару кликов (вытягиваем данные из Голоса в LibreOffice Calc)

Доброй ночи, совы =) Сегодня мне удалось написать скрипт, который (пока что локально) загружает ваши посты из Голоса и делает из них CSV файл, который можно открыть в LibreOffice Calc или Google Drive.

Первая часть эпопеи с загрузкой данных - вот в этом посте.

Сегодня я продолжил свои эксперименты. К сожалению, я пока не пытал напрямую гугл драйв (хотя это, скорее всего, впереди) - зато сделал скрипт, bash-конвертер, который строит из ваших постов единый CSV-файл (Comma-Separated Values, значения, разделенные запятой - простейший формат таблицы или базы данных).

Не буду долго объяснять вам всю полезность этого скрипта, вместо этого просто покажу, что в итоге получается.

SciptResult]

Вот такая удобная табличка, в которой вы можете делать собственные выводы, строить графики и так далее

А вот так выглядит успешно отработавший скрипт в bash:

Bash]

Код скрипта (возьмите лучше его с моего pastebin) или см. ниже

#!/bin/bash

tempfile="temp.articles.temp"    # Temp file (for articles list)
nu="http://node.golos.ws"        # Node URL
af="articles"                    # Article folder
mkdir $af

echo "Welcome! Let's look at articles list of user @$1 - loading articles."

# Loading articles list from user $1
x=$(curl -s --data '{"method": "get_discussions_by_author_before_date", "params": ["'$1'","","2016-06-06T00:00:00","100"], "id": 1 }' $nu)
echo $x | jq -r 'recurse(.result.url[])?' | grep "url\":" | awk -F\" '{ print $4 }' | awk -F"/" '{ print $4 }' >> $tempfile

echo "Finished, I found total of "$(cat $tempfile | wc -l)" articles of user "$1

# Creating a template for CSV file
t=0
echo -e "\"Title\",\"Date\",\"Comments\",\"Votes\",\"Gold\",\"Tag1\",\"Tag2\",\"Tag3\",\"Tag4\",\"Tag5\",\"Images\",\"Text length\"" >> $af/allarticles.$1

# Starting a loop over $tempfile
while read p; do
((t++))
echo "Saving article $t: $p"
y=$(curl -s --data '{"method": "get_content", "params": ["'$1'","'$p'"], "id": 1 }' $nu)
echo $y | jq -r '.result.title,.result.created,.result.children,.result.net_votes,.result.total_payout_value,[.result.json_metadata|fromjson.tags],[.result.json_metadata|fromjson.image|length],[.result.body|length]' > $af/$p.$1

# Following code takes data from saved articles file and builds an index article file
title=$(sed '1q;d' $af/$p.$1)
time=$(sed '2q;d' $af/$p.$1)
comments=$(sed '3q;d' $af/$p.$1)
votes=$(sed '4q;d' $af/$p.$1)
gold=$(sed '5q;d' $af/$p.$1)
t1=$(sed '8q;d' $af/$p.$1)
t2=$(sed '9q;d' $af/$p.$1)
t3=$(sed '10q;d' $af/$p.$1)
t4=$(sed '11q;d' $af/$p.$1)
t5=$(sed '12q;d' $af/$p.$1)
images=$(sed '16q;d' $af/$p.$1)
symbols=$(sed '19q;d' $af/$p.$1)

echo -e "\"$title\",\"$time\",\"$comments\",\"$votes\",\"$gold\",$t1$t2$t3$t4$t5,\"$images\",\"$symbols\"" >> $af/allarticles.$1

done < $tempfile

# Remove tempfile if you like:
rm $tempfile

Для простоты вы можете скачать себе скрипт на ПК и сделать его исполняемым 1 командой:

wget -O articles.sh https://pastebin.com/raw/kxxsQuS6 && chmod +x articles.sh

Затем, чтобы запустить скрипт, используйте

./articles.sh sxiii

Разумеется, заменив sxiii на ваш никнейм с платформы Голос.

ВНИМАНИЕ! В настоящий момент логика скрипта подразумевает, что у вас у кажого поста проставлено 5 тэгов (т.е. максимум). Если где-то меньше, советую отредактировать посты и добавить дополнительные теги - статье хуже не станет, а строчки с результате работы скрипта не "поедут". В будущей версии, возможно, буду handle (обрабатывать) этот момент.

В следующем этапе разработки данного скрипта я постараюсь также сделать прямую загрузку данных в Google Таблицы, минуя ваш ПК.

Если вам пригодился мой скрипт или есть идеи по его развитию (или вы вдруг знаете как напрямую легче всего загнать данные в Google Таблицы), пишите комментарии.

Всегда рад!

С уважением,
Айтишник, линуксоид из Ростова-на-Дону
Den Ivanov aka sxiii

linuxbashscriptingскриптылинукс
25%
17
39
107.740 GOLOS
0
В избранное
Den Ivanov
Crazybrained IT geek with wide Linux tools knowledge
39
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (8)
Сортировать по:
Сначала старые