diff options
Diffstat (limited to 'web/req')
-rw-r--r-- | web/req/.htaccess | 12 | ||||
-rw-r--r-- | web/req/config.py | 9 | ||||
-rw-r--r-- | web/req/db.py | 25 | ||||
-rw-r--r-- | web/req/frame.py | 12 | ||||
-rw-r--r-- | web/req/insecam_scrape.py | 45 | ||||
-rwxr-xr-x | web/req/request.py | 56 |
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}) + |