hi
This commit is contained in:
commit
38a50d04c6
5 changed files with 122 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
__pycache__/
|
||||
.mypy_cache
|
7
README.md
Normal file
7
README.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
First do `pip install --user -r requirements.txt` (or use a virtual env or
|
||||
something, idc). Then do `flask run`. That should be about it.
|
||||
|
||||
Grab the API call from inspect element and stick it in the input box.
|
||||
|
||||
If Marktplaats gets mad at you for using this for some reason, don't get mad at
|
||||
me. Use at your own risk.
|
29
app.py
Normal file
29
app.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
import requests
|
||||
from datetime import datetime
|
||||
from dateutil.parser import parse as dateparse
|
||||
from pytz import reference
|
||||
import flask
|
||||
|
||||
app = flask.Flask(__name__)
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
url = flask.request.args.get("apiurl", "")
|
||||
if url:
|
||||
json = requests.get(url).json()
|
||||
listings = [
|
||||
listing
|
||||
for listing in json["listings"]
|
||||
if listing["priorityProduct"] == "NONE"
|
||||
]
|
||||
else:
|
||||
listings = []
|
||||
|
||||
return flask.render_template(
|
||||
"marktplaats.html",
|
||||
listings=listings,
|
||||
dateparse=dateparse,
|
||||
tz=reference.LocalTimezone(),
|
||||
apiurl=url,
|
||||
)
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
pytz~=2019.3
|
||||
Flask~=1.1.1
|
||||
python-dateutil~=2.8.1
|
81
templates/marktplaats.html
Normal file
81
templates/marktplaats.html
Normal file
|
@ -0,0 +1,81 @@
|
|||
{##}
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="60">
|
||||
<style>
|
||||
main {
|
||||
font-family: sans-serif;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.listing {
|
||||
display: flex;
|
||||
padding: 8px;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, .12);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.listing:hover {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.listing > div:first-child {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<form method="get">
|
||||
URL:
|
||||
<input type="text" name="apiurl" value="{{apiurl}}" placeholder="https://www.marktplaats.nl/lrp/api/search?...">
|
||||
<input type="submit" value="h">
|
||||
</form>
|
||||
|
||||
{% for listing in listings %}
|
||||
<a href="https://marktplaats.nl{{listing.vipUrl}}">
|
||||
<div class="listing">
|
||||
<div>
|
||||
<h1>{{listing.title}}</h1>
|
||||
<p>
|
||||
€{{ "{:.2f}".format(listing.priceInfo.priceCents / 100) }}
|
||||
{{listing.priceInfo.priceType}}
|
||||
<br>
|
||||
|
||||
{{dateparse(listing.date).astimezone(tz).strftime("%Y-%m-%d %H:%M")}}
|
||||
<br>
|
||||
|
||||
{{listing.location.cityName}} ({{listing.location.distanceMeters // 1000}} km)
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{% for image in listing.imageUrls %}
|
||||
<img src="{{ image }}" />
|
||||
{% endfor %}
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue