Skip to content

Commit

Permalink
UI
Browse files Browse the repository at this point in the history
  • Loading branch information
Haiss2 committed Sep 30, 2021
1 parent 4766964 commit 3795b93
Show file tree
Hide file tree
Showing 10 changed files with 728 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__pycache__
165 changes: 165 additions & 0 deletions competitor_comparision.py
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")


159 changes: 159 additions & 0 deletions competitor_top_worst.py
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")


61 changes: 61 additions & 0 deletions fast_api.py
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

Loading

0 comments on commit 3795b93

Please sign in to comment.