-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
728 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
__pycache__ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
import string | ||
import datetime as dt | ||
import random | ||
|
||
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment | ||
from openpyxl import Workbook | ||
from openpyxl.chart import LineChart, Reference | ||
from openpyxl.drawing.image import Image | ||
from openpyxl.chart.axis import DateAxis | ||
|
||
class CompetitorComparision(): | ||
|
||
def __init__(self, wb): | ||
self.wb = wb | ||
self.thin = Side(border_style="thin", color="000000") | ||
self.border = Border(left=self.thin, right=self.thin, top=self.thin, bottom=self.thin) | ||
|
||
def set_border(self, ws, cell_range): | ||
rows = ws[cell_range] | ||
for row in rows: | ||
row[0].border = Border(left=self.thin) | ||
row[-1].border = Border(right=self.thin) | ||
for c in rows[0]: | ||
c.border = Border(top=self.thin) | ||
for c in rows[-1]: | ||
c.border = Border(bottom=self.thin) | ||
rows[0][0].border = Border(top=self.thin, left=self.thin) | ||
rows[0][-1].border = Border(top=self.thin, right=self.thin) | ||
rows[-1][0].border = Border(bottom=self.thin, left=self.thin) | ||
rows[-1][-1].border = Border(bottom=self.thin, right=self.thin) | ||
|
||
def render_grid(self, ws, title, col_label_index, col_data_index, chart_where, row_start, row_end, width, height): | ||
# chart here | ||
c1 = LineChart() | ||
c1.width = width | ||
c1.height = height | ||
c1.style = 13 | ||
c1.title = title | ||
|
||
labels = Reference(ws, min_row=row_start, max_row=row_end,min_col=col_label_index) | ||
data = Reference(ws, min_row=row_start-1, max_row=row_end,min_col=col_data_index) | ||
|
||
c1.add_data(data, titles_from_data=True) | ||
c1.set_categories(labels) | ||
|
||
ws.add_chart(c1, chart_where) | ||
|
||
def render(self): | ||
wb = self.wb | ||
competitor_comparision = wb.create_sheet("Competitor Comparison") | ||
competitor_comparision.sheet_view.zoomScale = 85 | ||
competitor_comparision.column_dimensions['A'].width = 6 | ||
competitor_comparision.column_dimensions['B'].width = 6 | ||
|
||
for i in list(string.ascii_uppercase[2:8]): | ||
competitor_comparision.column_dimensions[i].width = 13 | ||
|
||
competitor_comparision.column_dimensions['I'].width = 4 | ||
|
||
for i in list(string.ascii_uppercase[9:19]): | ||
competitor_comparision.column_dimensions[i].width = 13 | ||
|
||
competitor_comparision.row_dimensions[1].height = 20 | ||
competitor_comparision.row_dimensions[2].height = 27 | ||
for y in range(3, 60): | ||
competitor_comparision.row_dimensions[y].height = 18.75 | ||
|
||
# merge cell here | ||
for merge_cells in ['A1:B2', 'C1:E1', 'F1:H1']: | ||
competitor_comparision.merge_cells(merge_cells) | ||
|
||
_1st_table_headers = [ | ||
{"value": "airmega_coway", "pos": 'C1', "fill_color": "00FFCC99", "color": "00000000", "b": False}, | ||
{"value": "Post", "pos": 'C2', "fill_color": "00FFCC99", "color": "00000000", "b": False}, | ||
{"value": "Follower", "pos": 'D2', "fill_color": "00FFCC99", "color": "00000000", "b": False}, | ||
{"value": "Follower\n(+/-)", "pos": 'E2', "fill_color": "00FFCC99", "color": "00000000", "b": False}, | ||
|
||
{"value": "iwai_kampo", "pos": 'F1', "fill_color": "003366FF", "color": "00FFFFFF", "b": True}, | ||
{"value": "Post", "pos": 'F2', "fill_color": "003366FF", "color": "00FFFFFF", "b": True}, | ||
{"value": "Follower", "pos": 'G2', "fill_color": "003366FF", "color": "00FFFFFF", "b": True}, | ||
{"value": "Follower\n(+/-)", "pos": 'H2', "fill_color": "003366FF", "color": "00FFFFFF", "b": True} | ||
] | ||
|
||
for header in _1st_table_headers: | ||
el = competitor_comparision[header["pos"]] | ||
el.value = header["value"] | ||
el.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) | ||
el.font = Font(b=True, color=header["color"], size=9) | ||
el.fill = PatternFill("solid", fgColor=header["fill_color"]) | ||
|
||
|
||
day = ['Sat','Sun','Mon','Tue','Wed','Thu','Fri'] | ||
|
||
days = [ [str(i+1) + ' 日', day[i % 7]] for i in range(31)] | ||
competitive_data = [ [random.randint(0, 3), random.randint(1000, 1200)] for i in range(31)] | ||
my_data = [ [random.randint(0, 3) , random.randint(1000, 1200)] for i in range(31)] | ||
|
||
for row in competitor_comparision['A1:H{}'.format(len(days) + 3)]: | ||
for cell in row: | ||
cell.border = self.border | ||
|
||
for i in range(len(days)): | ||
for j in range(8): | ||
el = competitor_comparision[string.ascii_uppercase[j] + str(3+i)] | ||
if j == 0 or j == 1: | ||
el.value = days[i][j] | ||
if j == 2 or j == 3: | ||
el.value = competitive_data[i][j-2] | ||
if j == 5 or j == 6: | ||
el.value = my_data[i][j-5] | ||
el.number_format = 'General' | ||
el.alignment = Alignment(horizontal="right", vertical="center") | ||
Eel = competitor_comparision['E'+ str(3+i)] | ||
Hel = competitor_comparision['H'+ str(3+i)] | ||
Eel.value = '-' if i == 0 else competitive_data[i][1] - competitive_data[i-1][1] | ||
Hel.value = '-' if i == 0 else my_data[i][1] - my_data[i-1][1] | ||
|
||
self.render_grid(competitor_comparision, 'Number of Followers',1, 4, 'J1', 3, 33, 24, 7.53) | ||
self.render_grid(competitor_comparision, 'Number of Posts', 1, 3, 'J13', 3, 33, 24, 7) | ||
|
||
# merge cell here | ||
for merge_cells in ['J25:L25', 'J26:J27', 'K26:K27', 'L26:L27', 'A39:B41', 'C39:S41']: | ||
competitor_comparision.merge_cells(merge_cells) | ||
|
||
for row in competitor_comparision['J26:L34']: | ||
for cell in row: | ||
cell.border = self.border | ||
|
||
competitor_comparision['J25'].value = 'Number of Post on Date' | ||
competitor_comparision['J25'].font = Font(b=False, color="00000000", size=14) | ||
|
||
|
||
|
||
competitor_comparision['K26'].alignment = Alignment(horizontal="center", vertical="center") | ||
competitor_comparision['K26'].font = Font(b=False, color="00000000", size=12) | ||
competitor_comparision['K26'].fill = PatternFill("solid", fgColor="00FFCC99") | ||
competitor_comparision['K26'].value = "airmega_coway" | ||
|
||
|
||
competitor_comparision['L26'].alignment = Alignment(horizontal="center", vertical="center") | ||
competitor_comparision['L26'].font = Font(b=False, color="00FFFFFF", size=12) | ||
competitor_comparision['L26'].fill = PatternFill("solid", fgColor="003366FF") | ||
competitor_comparision['L26'].value = "iwai_kampo" | ||
|
||
for i, date in enumerate(day): | ||
cell = competitor_comparision['J{}'.format(28+i)] | ||
cell.value = date | ||
cell.fill = PatternFill("solid", fgColor="00C0C0C0") | ||
|
||
competitor_comparision['K{}'.format(28+i)].value = random.randint(0,6) | ||
competitor_comparision['L{}'.format(28+i)].value = random.randint(0,6) | ||
|
||
self.render_grid(competitor_comparision, 'Number of Post on Date', 10, 11, 'N25', 28, 34, 14.4, 6.5) | ||
|
||
|
||
competitor_comparision['J36'].value = '※1 The follower of competitor is available since the day you connected your account to Reposta.' | ||
competitor_comparision['J37'].value = '※2 The follower of account is available since the day you connected your account to Reposta.' | ||
|
||
competitor_comparision['A39'].value = 'Comments' | ||
self.set_border(competitor_comparision, 'C39:S41') | ||
competitor_comparision['A39'].alignment = Alignment(horizontal="center", vertical="center") | ||
competitor_comparision['A39'].font = Font(b=True, color="00FFFFFF", size=12) | ||
competitor_comparision['A39'].fill = PatternFill("solid", fgColor="003366FF") | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
import string | ||
import datetime as dt | ||
|
||
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment | ||
from openpyxl import Workbook | ||
from openpyxl.chart import LineChart, Reference | ||
from openpyxl.drawing.image import Image | ||
from openpyxl.chart.axis import DateAxis | ||
|
||
class CompetitorTopWorst(): | ||
|
||
def __init__(self, wb): | ||
self.wb = wb | ||
self.thin = Side(border_style="thin", color="000000") | ||
self.border = Border(left=self.thin, right=self.thin, top=self.thin, bottom=self.thin) | ||
|
||
def set_border(self, ws, cell_range): | ||
rows = ws[cell_range] | ||
for row in rows: | ||
row[0].border = Border(left=self.thin) | ||
row[-1].border = Border(right=self.thin) | ||
for c in rows[0]: | ||
c.border = Border(top=self.thin) | ||
for c in rows[-1]: | ||
c.border = Border(bottom=self.thin) | ||
rows[0][0].border = Border(top=self.thin, left=self.thin) | ||
rows[0][-1].border = Border(top=self.thin, right=self.thin) | ||
rows[-1][0].border = Border(bottom=self.thin, left=self.thin) | ||
rows[-1][-1].border = Border(bottom=self.thin, right=self.thin) | ||
|
||
|
||
def render(self): | ||
wb = self.wb | ||
competitor_top_worst = wb.create_sheet("Competitor Engagemen TOP&WORST3") | ||
competitor_top_worst.sheet_view.zoomScale = 85 | ||
|
||
for x in list(string.ascii_uppercase[4:12]): | ||
competitor_top_worst.column_dimensions[x].width = 14 | ||
competitor_top_worst.column_dimensions['A'].width = 14 | ||
competitor_top_worst.column_dimensions['B'].width = 24 | ||
competitor_top_worst.column_dimensions['C'].width = 24 | ||
competitor_top_worst.column_dimensions['D'].width = 14.3 | ||
competitor_top_worst.column_dimensions['E'].width = 30 | ||
|
||
for merge_cells in ['A1:B1','A2:A3', 'B2:B3', 'C2:C3', 'D2:D3', 'E2:E3', 'F2:H2']: | ||
competitor_top_worst.merge_cells(merge_cells) | ||
|
||
headers = [ | ||
{ "label": "", "pos": "A2"}, | ||
{ "label": "Posted Date", "pos": "B2"}, | ||
{ "label": "Type", "pos": "C2"}, | ||
{ "label": "Thumbnail", "pos": "D2"}, | ||
{ "label": "Posts Contents", "pos": "E2"}, | ||
{ "label": "Engagement", "pos": "F2"}, | ||
{ "label": "Likes", "pos": "F3"}, | ||
{ "label": "Comments", "pos": "G3"}, | ||
{ "label": "Total", "pos": "H3"}, | ||
] | ||
|
||
for header in headers: | ||
cell = competitor_top_worst[header["pos"]] | ||
cell.alignment = Alignment(horizontal="center", vertical="center") | ||
cell.font = Font(b=True, color="00FFFFFF", size=12) | ||
cell.fill = PatternFill("solid", fgColor="00FFCC99") | ||
cell.value = header["label"] | ||
|
||
|
||
datum = { | ||
"time": "2021/05/04 18:44:09", | ||
"type": "Carousel", | ||
"thumnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQlu-5sicFuHii8BAVf-lwWzS0D4bOJ00mHAQ&usqp=CAU", | ||
"post_contents": "Styles are used to change the look of your data while displayed on screen. They are also used to determine the formatting for numbers.", | ||
"like": 23, | ||
"comment": 34, | ||
"total": 55, | ||
} | ||
|
||
competitor_top_worst.row_dimensions[1].height = 30 | ||
competitor_top_worst.row_dimensions[2].height = 15 | ||
competitor_top_worst.row_dimensions[2].height = 15 | ||
competitor_top_worst.row_dimensions[4].height = 15 | ||
competitor_top_worst.row_dimensions[8].height = 15 | ||
|
||
top_data = [ datum for i in range(3)] | ||
worst_data = [ datum for i in range(3)] | ||
|
||
for y in [5,6,7,9,10, 11]: | ||
competitor_top_worst.row_dimensions[y].height = 70 | ||
|
||
for row in competitor_top_worst['A2:H11']: | ||
for cell in row: | ||
cell.border = self.border | ||
|
||
# Top of the world | ||
competitor_top_worst['A4'].value = 'TOP▲' | ||
competitor_top_worst['A4'].font = Font(b=True, color="00000000", size=12) | ||
for row in competitor_top_worst['A4:H4']: | ||
for cell in row: | ||
cell.fill = PatternFill("solid", fgColor="0099CC00") | ||
|
||
for i, row in enumerate(top_data): | ||
no = competitor_top_worst['A{}'.format(5+i)] | ||
no.value = 'No.' + str(i+1) | ||
no.font = Font(b=True, color="00000000", size=16) | ||
no.fill = PatternFill("solid", fgColor="0099CC00") | ||
|
||
competitor_top_worst['B{}'.format(5+i)].value = row["time"] | ||
competitor_top_worst['C{}'.format(5+i)].value = row["type"] | ||
competitor_top_worst['E{}'.format(5+i)].value = row["post_contents"] | ||
competitor_top_worst['F{}'.format(5+i)].value = row["like"] | ||
competitor_top_worst['G{}'.format(5+i)].value = row["comment"] | ||
competitor_top_worst['H{}'.format(5+i)].value = row["total"] | ||
for letter in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']: | ||
competitor_top_worst['{}{}'.format(letter, 5+i)].alignment = Alignment(vertical="center") | ||
|
||
img = Image("img/post.png") | ||
competitor_top_worst.add_image(img, 'D{}'.format(5+i)) | ||
|
||
|
||
# Worst of the world | ||
competitor_top_worst['A8'].value = 'WORST▼' | ||
competitor_top_worst['A8'].font = Font(b=True, color="00FFFFFF", size=12) | ||
for row in competitor_top_worst['A8:H8']: | ||
for cell in row: | ||
cell.fill = PatternFill("solid", fgColor="00FF6600") | ||
|
||
for i, row in enumerate(worst_data): | ||
no = competitor_top_worst['A{}'.format(8+i)] | ||
no.value = 'No.' + str(i+1) | ||
no.font = Font(b=True, color="00FFFFFF", size=16) | ||
no.fill = PatternFill("solid", fgColor="00FF6600") | ||
|
||
competitor_top_worst['B{}'.format(9+i)].value = row["time"] | ||
competitor_top_worst['C{}'.format(9+i)].value = row["type"] | ||
competitor_top_worst['E{}'.format(9+i)].value = row["post_contents"] | ||
competitor_top_worst['F{}'.format(9+i)].value = row["like"] | ||
competitor_top_worst['G{}'.format(9+i)].value = row["comment"] | ||
competitor_top_worst['H{}'.format(9+i)].value = row["total"] | ||
for letter in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']: | ||
competitor_top_worst['{}{}'.format(letter, 9+i)].alignment = Alignment(vertical="center") | ||
|
||
img = Image("img/post.png") | ||
competitor_top_worst.add_image(img, 'D{}'.format(9+i)) | ||
|
||
|
||
# Notions | ||
competitor_top_worst['F13'].value = "※1Thumbnail of movie won't be displayed." | ||
|
||
# Comments | ||
competitor_top_worst.merge_cells('A15:B17') | ||
cmt = competitor_top_worst['A15'] | ||
cmt.value = 'Comments' | ||
competitor_top_worst.merge_cells('C15:H17') | ||
self.set_border(competitor_top_worst, 'C15:H17') | ||
cmt.alignment = Alignment(horizontal="center", vertical="center") | ||
cmt.font = Font(b=True, color="00FFFFFF", size=12) | ||
cmt.fill = PatternFill("solid", fgColor="00FFCC99") | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import string | ||
import datetime as dt | ||
from openpyxl import Workbook | ||
|
||
from cover_page import CoverPage | ||
from follower_analysis import FollowerAnalysis | ||
from m_o_m import MoM | ||
from d_o_d import DoD | ||
from post_list import PostList | ||
from stories_post_list import StoriesPostList | ||
from avg_each_type_of_post import AvgEachTypeOfPost | ||
from top_worst_post import TopWorstPost | ||
from top_worst_story import TopWorstStory | ||
from ads_post_list import AdsPostList | ||
from mention_ranking import MentionRanking | ||
from hashtag_analysis import HashtagAnalysis | ||
from competitor_comparision import CompetitorComparision | ||
from competitor_top_worst import CompetitorTopWorst | ||
from ranked_in_hashtag import RankedInHashtag | ||
from word_description import WordDescription | ||
from sheet_description import SheetDescription | ||
|
||
|
||
wb = Workbook() | ||
std = wb.get_sheet_by_name('Sheet') | ||
wb.remove_sheet(std) | ||
|
||
|
||
CoverPage(wb).render() | ||
FollowerAnalysis(wb).render() | ||
MoM(wb).render() | ||
DoD(wb).render() | ||
PostList(wb).render() | ||
AdsPostList(wb).render() | ||
StoriesPostList(wb).render() | ||
AvgEachTypeOfPost(wb).render() | ||
TopWorstPost(wb).render() | ||
TopWorstStory(wb).render() | ||
MentionRanking(wb).render() | ||
CompetitorComparision(wb).render() | ||
CompetitorTopWorst(wb).render() | ||
HashtagAnalysis(wb).render() | ||
RankedInHashtag(wb).render() | ||
WordDescription(wb).render() | ||
SheetDescription(wb).render() | ||
|
||
|
||
|
||
from fastapi import FastAPI | ||
from fastapi.responses import FileResponse | ||
|
||
|
||
app = FastAPI() | ||
|
||
|
||
@app.get("/", response_class=FileResponse) | ||
async def main(): | ||
some_file_path = "reboot_report.xlsx" | ||
wb.save("reboot_report.xlsx") | ||
return some_file_path | ||
|
Oops, something went wrong.