summaryrefslogtreecommitdiff
path: root/web/req
diff options
context:
space:
mode:
authorRichard Knight <q@1bpm.net>2020-08-24 14:47:08 +0100
committerRichard Knight <q@1bpm.net>2020-08-24 14:47:08 +0100
commit38b2a0d6928a7e29d7ac7a2332c3cccb1708ad30 (patch)
tree6cc0aa096ebf39bebb0e9a8eae46a10af736e457 /web/req
downloadpeep.1bpm.net-38b2a0d6928a7e29d7ac7a2332c3cccb1708ad30.tar.gz
peep.1bpm.net-38b2a0d6928a7e29d7ac7a2332c3cccb1708ad30.tar.bz2
peep.1bpm.net-38b2a0d6928a7e29d7ac7a2332c3cccb1708ad30.zip
initialHEADmaster
Diffstat (limited to 'web/req')
-rw-r--r--web/req/.htaccess12
-rw-r--r--web/req/config.py9
-rw-r--r--web/req/db.py25
-rw-r--r--web/req/frame.py12
-rw-r--r--web/req/insecam_scrape.py45
-rwxr-xr-xweb/req/request.py56
6 files changed, 159 insertions, 0 deletions
diff --git a/web/req/.htaccess b/web/req/.htaccess
new file mode 100644
index 0000000..9a58157
--- /dev/null
+++ b/web/req/.htaccess
@@ -0,0 +1,12 @@
+Options +ExecCGI
+AddHandler cgi-script .py
+
+<Files request.py>
+ Options +ExecCGI
+ AddHandler cgi-script .py
+ Order Allow,Deny
+ Allow from all
+</Files>
+
+Deny from all
+
diff --git a/web/req/config.py b/web/req/config.py
new file mode 100644
index 0000000..65819a7
--- /dev/null
+++ b/web/req/config.py
@@ -0,0 +1,9 @@
+
+db_host = "gut.in.bpm"
+db_name = "peep"
+db_user = "peep"
+db_password = "nvaef94tjadhehfge"
+
+base_url = "http://peep.1bpm.net/"
+
+
diff --git a/web/req/db.py b/web/req/db.py
new file mode 100644
index 0000000..9930eed
--- /dev/null
+++ b/web/req/db.py
@@ -0,0 +1,25 @@
+import config
+from playhouse.postgres_ext import *
+import datetime
+
+db = PostgresqlExtDatabase(
+ config.db_name,
+ host=config.db_host,
+ user=config.db_user,
+ password=config.db_password
+)
+
+
+class BaseModel(Model):
+ class Meta:
+ database = db
+
+class GalleryImage(BaseModel):
+ path = TextField()
+ added = DateTimeField(default=datetime.datetime.now)
+ added_by_ip = TextField()
+ added_by_name = TextField()
+ added_by_detail = TextField()
+
+if __name__ == "__main__":
+ db.create_tables(BaseModel.__subclasses__(), safe=True)
diff --git a/web/req/frame.py b/web/req/frame.py
new file mode 100644
index 0000000..7fbe5a2
--- /dev/null
+++ b/web/req/frame.py
@@ -0,0 +1,12 @@
+import cv2
+import urllib2
+
+url = "http://72.45.175.148/-wvhttp-01-/GetOneShot?image_size=640x480&frame_count=1000000000"
+src = urllib2.urlopen(url)
+if not x.info().type.startswith("image"):
+ cap = cv2.VideoCapture("http://72.45.175.148/-wvhttp-01-/GetOneShot?image_size=640x480&frame_count=1000000000")
+ ret, frame = cap.read()
+ cv2.imwrite(frame, "/usr/tmp/tst.jpg")
+
+'multipart/x-mixed-replace'
+'image/jpeg'
diff --git a/web/req/insecam_scrape.py b/web/req/insecam_scrape.py
new file mode 100644
index 0000000..4690d0f
--- /dev/null
+++ b/web/req/insecam_scrape.py
@@ -0,0 +1,45 @@
+import requests
+import os
+from lxml import html
+import sys
+import time
+import json
+
+def get(url):
+ return requests.get(url, headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"})
+
+data = dict()
+
+def get_page(type, src):
+ if not data.get(type):
+ data[type] = list()
+ images = src.xpath(".//img[contains(@id, 'image')]")
+ for image in images:
+ print image.attrib["src"]
+ data[type].append(image.attrib["src"])
+ open("/tmp/insecam_scrape.json", "w").write(json.dumps(data))
+ time.sleep(1)
+
+baseurl = "https://www.insecam.org/"
+page = get(baseurl)
+tree = html.fromstring(page.content)
+
+
+lnks = list()
+links = tree.xpath(".//*[@id='insecam-target']//*[@class='dropdown-menu']/li/a")
+for link in links:
+ if "bytype" in link.attrib["href"]:
+ lnks.append(link.attrib["href"][1:])
+
+for link in lnks:
+ type = link.replace("en/bytype", "").replace("/", "")
+ link = os.path.join(baseurl, link)
+ page = get(link + "?page=1")
+ tree = html.fromstring(page.content)
+ total_pages = int(tree.xpath("//script[contains(text(),'pagenavigator')]")[0].text.strip().replace("pagenavigator(\"?page=\", ", "").replace(", 1);", ""))
+ get_page(type, tree)
+ for x in range(2, total_pages+1):
+ page = get(link + "?page={}".format(x))
+ tree = html.fromstring(page.content)
+ get_page(type, tree)
+ time.sleep(5)
diff --git a/web/req/request.py b/web/req/request.py
new file mode 100755
index 0000000..eaa2929
--- /dev/null
+++ b/web/req/request.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+import cgi
+import cgitb
+import os
+import db
+import datetime
+import json
+import base64
+
+cgitb.enable()
+
+class Error(Exception):
+ pass
+
+class JSONReponse(object):
+ def __init__(self, data):
+ self.data = data
+
+ def respond(self):
+ print "Content-Type: application/json\n\n" + json.dumps(self.data)
+
+
+def local_files_path():
+ return os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "files"))
+
+def local_file(name):
+ return os.path.join(local_files_path(), name)
+
+def new_file(extension):
+ return "{0}{1}".format(datetime.datetime.now().strftime("%s%f"), extension)
+
+
+class Handler(object):
+ def __init__(self):
+ request = cgi.FieldStorage()
+ if os.environ["REQUEST_METHOD"] == "POST":
+ self.handle_post(request)
+ else:
+ self.handle_get(request)
+
+ def handle_get(self, request):
+ pass
+
+ def handle_post(self, request):
+ imagedata = data["image"]
+ filename = new_file(os.path.splitext(fileitem.filename)[1])
+ dest_path = local_file(filename)
+ open(dest_path, "wb").write(base64.b64decode(imagedata.replace("data:image/png;base64,", "")))
+ db.GalleryImage.create(
+ path=filename,
+ added_by_ip=os.environ["REMOTE_ADDR"],
+ added_by_name=data.getvalue("name", None)
+ added_by_detail=data.getvalue("detail", None)
+ )
+ return JSONResponse({"ok": True})
+