from flask import Flask, render_template, request, redirect
app = Flask("SuperScrapper")
import requests
import os
os.system("clear")
base_url = "http://hn.algolia.com/api/v1"
# This URL gets the newest stories.
newurl = f"{base_url}/search_by_date?tags=story"
# This URL gets the most popular stories
popularurl = f"{base_url}/search?tags=story"
DataBagenew = []
innew = []
DataBagePopular = []
inpopular = []
DataBagecom = []
def populardataget():
popular = requests.get(popularurl)
populardic = popular.json()
for i in populardic['hits']:
if i['num_comments'] != 0 and i['title'] != None:
if i['objectID'] not in inpopular:
inpopular.append(i['objectID'])
DataBagePopular.append(i)
return DataBagePopular
def newdataget():
new = requests.get(newurl)
populardic = new.json()
for i in populardic['hits']:
if i['title'] != None:
if i['objectID'] not in innew:
innew.append(i['objectID'])
DataBagenew.append(i)
return DataBagenew
@app.route("/")
def home():
order_by = request.args.get('order_by')
print(order_by)
if order_by == "new":
if DataBagenew:
DataBage = DataBagenew
else:
DataBage = newdataget()
return render_template("mvp.html", data=DataBage, order=order_by)
elif order_by == "popular":
if DataBagePopular:
DataBage = DataBagePopular
else:
DataBage = populardataget()
return render_template("mvp.html", data=DataBage, order=order_by)
else:
if DataBagePopular:
DataBage = DataBagePopular
else:
DataBage = populardataget()
return render_template("mvp.html", data=DataBage, order=order_by)
@app.route("/<number>")
def comment(number):
com = requests.get(f"{base_url}/items/{number}")
comdic = com.json()
return render_template("mvpcom.html", data = comdic)
def startgame():
app.run(host="0.0.0.0")
/* MVP.css v1.6.2 - https://github.com/andybrewer/mvp */
:root {
--border-radius: 5px;
--box-shadow: 2px 2px 10px;
--color: #118bee;
--color-accent: #118bee15;
--color-bg: #fff;
--color-bg-secondary: #e9e9e9;
--color-secondary: #920de9;
--color-secondary-accent: #920de90b;
--color-shadow: #f4f4f4;
--color-text: #000;
--color-text-secondary: #999;
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
--hover-brightness: 1.2;
--justify-important: center;
--justify-normal: left;
--line-height: 1.5;
--width-card: 285px;
--width-card-medium: 460px;
--width-card-wide: 800px;
--width-content: 1080px;
}
/*
@media (prefers-color-scheme: dark) {
:root {
--color: #0097fc;
--color-accent: #0097fc4f;
--color-bg: #333;
--color-bg-secondary: #555;
--color-secondary: #e20de9;
--color-secondary-accent: #e20de94f;
--color-shadow: #bbbbbb20;
--color-text: #f7f7f7;
--color-text-secondary: #aaa;
}
}
*/
/* Layout */
article aside {
background: var(--color-secondary-accent);
border-left: 4px solid var(--color-secondary);
padding: 0.01rem 0.8rem;
}
body {
background: var(--color-bg);
color: var(--color-text);
font-family: var(--font-family);
line-height: var(--line-height);
margin: 0;
overflow-x: hidden;
padding: 1rem 0;
}
footer,
header,
main {
margin: 0 auto;
max-width: var(--width-content);
padding: 2rem 1rem;
}
hr {
background-color: var(--color-bg-secondary);
border: none;
height: 1px;
margin: 4rem 0;
}
section {
display: flex;
flex-wrap: wrap;
justify-content: var(--justify-important);
}
section aside {
border: 1px solid var(--color-bg-secondary);
border-radius: var(--border-radius);
box-shadow: var(--box-shadow) var(--color-shadow);
margin: 1rem;
padding: 1.25rem;
width: var(--width-card);
}
section aside:hover {
box-shadow: var(--box-shadow) var(--color-bg-secondary);
}
section aside img {
max-width: 100%;
}
[hidden] {
display: none;
}
/* Headers */
article header,
div header,
main header {
padding-top: 0;
}
header {
text-align: var(--justify-important);
}
header a b,
header a em,
header a i,
header a strong {
margin-left: 0.5rem;
margin-right: 0.5rem;
}
header nav img {
margin: 1rem 0;
}
section header {
padding-top: 0;
width: 100%;
}
/* Nav */
nav {
align-items: center;
display: flex;
font-weight: bold;
justify-content: space-between;
margin-bottom: 7rem;
}
nav ul {
list-style: none;
padding: 0;
}
nav ul li {
display: inline-block;
margin: 0 0.5rem;
position: relative;
text-align: left;
}
/* Nav Dropdown */
nav ul li:hover ul {
display: block;
}
nav ul li ul {
background: var(--color-bg);
border: 1px solid var(--color-bg-secondary);
border-radius: var(--border-radius);
box-shadow: var(--box-shadow) var(--color-shadow);
display: none;
height: auto;
left: -2px;
padding: .5rem 1rem;
position: absolute;
top: 1.7rem;
white-space: nowrap;
width: auto;
}
nav ul li ul li,
nav ul li ul li a {
display: block;
}
/* Typography */
code,
samp {
background-color: var(--color-accent);
border-radius: var(--border-radius);
color: var(--color-text);
display: inline-block;
margin: 0 0.1rem;
padding: 0 0.5rem;
}
details {
margin: 1.3rem 0;
}
details summary {
font-weight: bold;
cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6 {
line-height: var(--line-height);
}
mark {
padding: 0.1rem;
}
ol li,
ul li {
padding: 0.2rem 0;
}
p {
margin: 0.75rem 0;
padding: 0;
}
pre {
margin: 1rem 0;
max-width: var(--width-card-wide);
padding: 1rem 0;
}
pre code,
pre samp {
display: block;
max-width: var(--width-card-wide);
padding: 0.5rem 2rem;
white-space: pre-wrap;
}
small {
color: var(--color-text-secondary);
}
sup {
background-color: var(--color-secondary);
border-radius: var(--border-radius);
color: var(--color-bg);
font-size: xx-small;
font-weight: bold;
margin: 0.2rem;
padding: 0.2rem 0.3rem;
position: relative;
top: -2px;
}
/* Links */
a {
color: var(--color-secondary);
display: inline-block;
font-weight: bold;
text-decoration: none;
}
a:hover {
filter: brightness(var(--hover-brightness));
text-decoration: underline;
}
a b,
a em,
a i,
a strong,
button {
border-radius: var(--border-radius);
display: inline-block;
font-size: medium;
font-weight: bold;
line-height: var(--line-height);
margin: 0.5rem 0;
padding: 1rem 2rem;
}
button {
font-family: var(--font-family);
}
button:hover {
cursor: pointer;
filter: brightness(var(--hover-brightness));
}
a b,
a strong,
button {
background-color: var(--color);
border: 2px solid var(--color);
color: var(--color-bg);
}
a em,
a i {
border: 2px solid var(--color);
border-radius: var(--border-radius);
color: var(--color);
display: inline-block;
padding: 1rem 2rem;
}
/* Images */
figure {
margin: 0;
padding: 0;
}
figure img {
max-width: 100%;
}
figure figcaption {
color: var(--color-text-secondary);
}
/* Forms */
button:disabled,
input:disabled {
background: var(--color-bg-secondary);
border-color: var(--color-bg-secondary);
color: var(--color-text-secondary);
cursor: not-allowed;
}
button[disabled]:hover {
filter: none;
}
form {
border: 1px solid var(--color-bg-secondary);
border-radius: var(--border-radius);
box-shadow: var(--box-shadow) var(--color-shadow);
display: block;
max-width: var(--width-card-wide);
min-width: var(--width-card);
padding: 1.5rem;
text-align: var(--justify-normal);
}
form header {
margin: 1.5rem 0;
padding: 1.5rem 0;
}
input,
label,
select,
textarea {
display: block;
font-size: inherit;
max-width: var(--width-card-wide);
}
input[type="checkbox"],
input[type="radio"] {
display: inline-block;
}
input[type="checkbox"]+label,
input[type="radio"]+label {
display: inline-block;
font-weight: normal;
position: relative;
top: 1px;
}
input,
select,
textarea {
border: 1px solid var(--color-bg-secondary);
border-radius: var(--border-radius);
margin-bottom: 1rem;
padding: 0.4rem 0.8rem;
}
input[readonly],
textarea[readonly] {
background-color: var(--color-bg-secondary);
}
label {
font-weight: bold;
margin-bottom: 0.2rem;
}
/* Tables */
table {
border: 1px solid var(--color-bg-secondary);
border-radius: var(--border-radius);
border-spacing: 0;
display: inline-block;
max-width: 100%;
overflow-x: auto;
padding: 0;
white-space: nowrap;
}
table td,
table th,
table tr {
padding: 0.4rem 0.8rem;
text-align: var(--justify-important);
}
table thead {
background-color: var(--color);
border-collapse: collapse;
border-radius: var(--border-radius);
color: var(--color-bg);
margin: 0;
padding: 0;
}
table thead th:first-child {
border-top-left-radius: var(--border-radius);
}
table thead th:last-child {
border-top-right-radius: var(--border-radius);
}
table thead th:first-child,
table tr td:first-child {
text-align: var(--justify-normal);
}
table tr:nth-child(even) {
background-color: var(--color-accent);
}
/* Quotes */
blockquote {
display: block;
font-size: x-large;
line-height: var(--line-height);
margin: 1rem auto;
max-width: var(--width-card-medium);
padding: 1.5rem 1rem;
text-align: var(--justify-important);
}
blockquote footer {
color: var(--color-text-secondary);
display: block;
font-size: small;
line-height: var(--line-height);
padding: 1.5rem 0;
}
css는 좋은 아져씨꺼 사용하였다
<!DOCTYPE html>
<html>
<head>
<title>
Nomad News |
Popular
</title>
<link href="https://andybrewer.github.io/mvp/mvp.css" rel="stylesheet"></link>
</head>
<body>
<header>
<h1>Nomad News</h1>
{% if order == "popular"%}
<div>
Order by:
<strong>Popular</strong>
|
<a href="/?order_by=new">New</a>
</div>
{% elif order == "new"%}
<div>
Order by:
<a href="/?order_by=popular">Popular</a>
|
<strong>New</strong>
</div>
{% else %}
<div>
Order by:
<strong>Popular</strong>
|
<a href="/?order_by=new">New</a>
</div>
{% endif %}
</header>
<main>
{% for i in data%}
<div>
<div>
<a href="{{i["objectID"]}}">
<h3>
{{i["title"]}}
</h3>
</a>
(<a href="{{i["url"]}}" target="blanl">{{i["url"]}}
</a>)
</div>
<div>
{{i["points"]}} points | By: {{i["author"]}} | {{i["num_comments"]}} comments
</div>
</div>
<hr />
{% endfor %}
</main>
</body>
</html>
메인 html이라고 볼수 있다
<!DOCTYPE html>
<html>
<head>
<title>
Nomad News | Steve Jobs has passed away.
</title>
<link href="https://andybrewer.github.io/mvp/mvp.css" rel="stylesheet"></link>
</head>
<body>
<header>
<h1>{{data['title']}}</h1>
<div>
{{data['points']}} points | By {{data['author']}} | <a href="{{data['url']}}" target="_blank">{{data['url']}}</a>
</div>
</header>
<main>
{% for i in data['children']%}
<div>
<strong>{{i['author']}}:</strong>
<p type="html">{{i['text']|safe}}</p>
</div>
<hr />
{% endfor %}
</main>
</body>
</html>
서브 html이라고 볼수 있다
이번꺼는 잘 넘어갔고
html에 값을 넘기는 방법과 파이썬으로 사용하는 방법 이용하여 만들면 좋다~!
'nomadcoders 공부 심화' 카테고리의 다른 글
2주 첼린지~ 마치며(nomadcoders) (0) | 2020.09.07 |
---|---|
2주 첼린지~ 8일차 (nomadcoders) (0) | 2020.09.06 |
2주 첼린지~ 7일차 (nomadcoders) (0) | 2020.08.30 |
2주 첼린지~ 6일차 (nomadcoders) (0) | 2020.08.30 |
2주 첼린지~ 5일차 (nomadcoders) (0) | 2020.08.30 |