Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!
Sexy pq.de (20) tot?
-
- Combo
- Beiträge: 13807
- Registriert: Okt 2000
- Wohnort: LK Rosenheim
Kann das nicht Peter übernehmen damit das was wird? Nichts gegen euch aber naja.
RDX hat geschrieben:Halt einfach mal deine verfickte Fresse du Spast, OK? Wenn es dir Spass macht nach dem Essen einen grummelnden Magen zu haben (noch dazu nachdem du etwas gegessen hast was dir absolut nicht schmeckt) um dann irgendwann furzend auf's Klo zu spazieren und richtig ordentlichen Weichschiss zu hinterlassen wonach du deinen Arsch etwa 12 mal abwischen musst, dann viel Spass damit.
Wenn nicht, dann halt's Maul und lass mich in Ruhe.
-
- Administrator
- Beiträge: 23012
- Registriert: Jan 2000
- Wohnort: NRW
- Kontaktdaten:
Welcher Peter?fame hat geschrieben:Kann das nicht Peter übernehmen damit das was wird? Nichts gegen euch aber naja.
Oder meinst Du Peer (Forlani)?
Nach meinem Kenntnisstand haben ihn nahezu alle namhaften pq-Admins bzgl. eines Backups o.ä. kontaktiert und er zeigte kaum Reaktion bzw. ließ durchschimmern, dass er es wirklich ernst meint.. und es scheint ihm auch nicht wirklich viel daran zu liegen, uns diesen Community-Dienst zu erweisen..
Also versuche ich zumindest auf diese möglichst einfache und schnelle Art und Weise die Seite zu spiegeln, damit man darauf aufbauend ggf. eine archivierte Version bereitstellen kann..
Erstmal scrapen was geht, was man damit anstellt, kann man später überlegen..
Wenn heute im Laufe des Tages die Lichter ausgehen, kann es sein, dass alle Threads unwiederbringbar weg sind - das ist Dir klar, oder?
-
- Wrack
- Beiträge: 488
- Registriert: Dez 2002
-
- Dopefish
- Beiträge: 4583
- Registriert: Jun 2005
- Wohnort: Stuttgart
ich glaube, das war ein Witz.EviLsEyE hat geschrieben:Welcher Peter?
Oder meinst Du Peer (Forlani)?
Nach meinem Kenntnisstand haben ihn nahezu alle namhaften pq-Admins bzgl. eines Backups o.ä. kontaktiert und er zeigte kaum Reaktion bzw. ließ durchschimmern, dass er es wirklich ernst meint.. und es scheint ihm auch nicht wirklich viel daran zu liegen, uns diesen Community-Dienst zu erweisen..
Also versuche ich zumindest auf diese möglichst einfache und schnelle Art und Weise die Seite zu spiegeln, damit man darauf aufbauend ggf. eine archivierte Version bereitstellen kann..
Erstmal scrapen was geht, was man damit anstellt, kann man später überlegen..
Wenn heute im Laufe des Tages die Lichter ausgehen, kann es sein, dass alle Threads unwiederbringbar weg sind - das ist Dir klar, oder?
Peter war doch dieser "super-Admin-Typ" vor ein paar Jahren, als pq auf einmal inqame wurde. Null Ahnung, davon eine Menge und das hängte ihm zum Halse raus.
いつでも捜しているよ どっかに君の姿を
-
- Administrator
- Beiträge: 23012
- Registriert: Jan 2000
- Wohnort: NRW
- Kontaktdaten:
juyotoken hat geschrieben:ich glaube, das war ein Witz.
Peter war doch dieser "super-Admin-Typ" vor ein paar Jahren, als pq auf einmal inqame wurde. Null Ahnung, davon eine Menge und das hängte ihm zum Halse raus.
stimmt, da war was.. aber wurde der nicht nach 1-2 Jahren wieder abgesägt wegen unüberwindbaren Differenzen?
-
- Dopefish
- Beiträge: 4583
- Registriert: Jun 2005
- Wohnort: Stuttgart
-
- Bones
- Beiträge: 3064
- Registriert: Jun 2003
- Kontaktdaten:
bah, dabei hab forum gerade erst nach mehreren Jahren Pause wieder entdeckt.
Dann werde ich wohl doch mal wieder IRC und Discord anschmeißen.
#fickdichforlani!
Dann werde ich wohl doch mal wieder IRC und Discord anschmeißen.
#fickdichforlani!
...the "Principle of Quake" as I described it is SHOOTING. that's why it's called a "First Person SHOOTER", ladies and gentleman, not a "First Person Red Armor Timer"...Original erstellt von prion
Und die Leute die gerne Angeln, anstatt auf die Jagd zu gehen, sollen halt CS spielen
juyotoken hat geschrieben:ich glaube, das war ein Witz.
Peter war doch dieser "super-Admin-Typ" vor ein paar Jahren, als pq auf einmal inqame wurde. Null Ahnung, davon eine Menge und das hängte ihm zum Halse raus.
Ich glaube wegen Peter hat Drluv auch damals seinen Moderator Posten geschmissen,weil er dieser Zwiebelpeter Shice nicht mehr zusehen konnte.
Es wäre gut zu wissen ob es eine möglichkeit gibt dieses nutzlose Board zu kaufen.
#rettetpq
-
- Wrack
- Beiträge: 488
- Registriert: Dez 2002
Cookie-Support tut. Den rohen http-Dump bekommt jetzt aber keiner mehr
Da ich aber nicht in alle Foren kann, wird da dennoch etwas fehlen.
Daher hier noch der aktuelle Code
Da ich aber nicht in alle Foren kann, wird da dennoch etwas fehlen.
Daher hier noch der aktuelle Code
Code: Alles auswählen
#!/usr/bin/env python3
from lxml import html
import requests
import pickle
import os
from progress.bar import Bar
import concurrent.futures
import pathlib
import sys
base_url = "https://quake.ingame.de/forum/threads"
file_name_tmpl = "thread{}_page{}"
do_update = True
num_parallel = 32
first_thread_id = 0 ## 180740 ##20000
last_thread_id = 292836
#Cookires muss man sich aus dem Browser holen
cookies = {
# unter ingame
"inToken" : "",
#unter quake.ingame.de
"bb_sessionhash" : "",
"PHPSESSID" : ""
}
pathlib.Path('raw').mkdir(parents=True, exist_ok=True)
pathlib.Path('html').mkdir(parents=True, exist_ok=True)
def rawfileName(thread_id, page_id):
file_name = file_name_tmpl.format(thread_id, page_id)
return file_name
# return os.path.join("raw", file_name)
def htmlFileName(thread_id, page_id):
file_name = "{}.html".format(file_name_tmpl.format(thread_id, page_id))
return file_name
# return os.path.join("html", file_name)
def single_page(thread_id, page_id):
url = "{}/{}/page{}".format(base_url, thread_id, page_id)
# print("Getting file {}".format(url))
page = requests.get(url, cookies=cookies)
# print("Pickle target: {}".format(rawfileName(thread_id, page_id)))
#Dump page immediately, since html from string sometimes excepts due to encoder problems
pickle.dump(page, open(rawfileName(thread_id, page_id), "wb") )
try:
tree = html.document_fromstring(page.content)
except Exception: # try reading as text encoded as utf-8?
tree = html.document_fromstring(page.text)
next_page = "page{}".format(page_id+1)
have_next = False
for x in tree.iterlinks():
if next_page in x[2]:
have_next = True
break
try:
with open(htmlFileName(thread_id, page_id), 'wb') as f:
f.write(html.tostring(tree))
except Exception as e:
print("Failed to write thread {} page {}: {}".format(thread_id, page_id, e))
return have_next
def single_thread(thread_id):
page_id = 1
if os.path.exists(rawfileName(thread_id, page_id)) and os.path.exists(htmlFileName(thread_id, page_id)):
if not do_update:
# print("Thread {} already fetched".format(thread_id))
return
while True:
if os.path.exists(rawfileName(thread_id, page_id+1)):
page_id += 1
else:
break
# print("Starting update for thread {} from page {}".format(thread_id, page_id))
## page_id now points to the last valid page
while single_page(thread_id, page_id):
page_id += 1
# print("Thread {} had {} pages".format(thread_id, page_id))
def safe_single_thread(thread_id):
# print("Getting thread {}".format(thread_id))
try:
single_thread(thread_id)
except Exception as e:
print("Failed to fetch thread {}: {}".format(thread_id, e))
#encode problems:
# safe_single_thread(292045)
# safe_single_thread(195823)
# safe_single_thread(last_thread_id)
# sys.exit(0)
with concurrent.futures.ThreadPoolExecutor(max_workers=num_parallel) as executor:
bar = Bar('Processing', max=last_thread_id-first_thread_id)
thread_id = last_thread_id
active_futures = set()
while thread_id > first_thread_id:
while len(active_futures) < num_parallel:
if thread_id <= first_thread_id:
break
active_futures.add( executor.submit(safe_single_thread, thread_id) )
thread_id -= 1
bar.next()
# wait for any future to finish and remove it from active_futures
finished_futures = concurrent.futures.wait(active_futures, None, concurrent.futures.FIRST_COMPLETED)
for x in finished_futures.done:
active_futures.remove(x)
concurrent.futures.wait(active_futures, None, concurrent.futures.ALL_COMPLETED)
bar.finish()
-
- Ranger
- Beiträge: 4
- Registriert: Mär 2005
Ah wunderbar. Später mal ausprobieren. Ich bereite mich gedanklich schon auf die Abschaltung von inWc vor.50493D33 hat geschrieben:Cookie-Support tut. Den rohen http-Dump bekommt jetzt aber keiner mehr
Da ich aber nicht in alle Foren kann, wird da dennoch etwas fehlen.
Daher hier noch der aktuelle CodeCode: Alles auswählen
#!/usr/bin/env python3 from lxml import html import requests import pickle import os from progress.bar import Bar import concurrent.futures import pathlib import sys base_url = "https://quake.ingame.de/forum/threads" file_name_tmpl = "thread{}_page{}" do_update = True num_parallel = 32 first_thread_id = 0 ## 180740 ##20000 last_thread_id = 292836 #Cookires muss man sich aus dem Browser holen cookies = { # unter ingame "inToken" : "", #unter quake.ingame.de "bb_sessionhash" : "", "PHPSESSID" : "" } pathlib.Path('raw').mkdir(parents=True, exist_ok=True) pathlib.Path('html').mkdir(parents=True, exist_ok=True) def rawfileName(thread_id, page_id): file_name = file_name_tmpl.format(thread_id, page_id) return file_name # return os.path.join("raw", file_name) def htmlFileName(thread_id, page_id): file_name = "{}.html".format(file_name_tmpl.format(thread_id, page_id)) return file_name # return os.path.join("html", file_name) def single_page(thread_id, page_id): url = "{}/{}/page{}".format(base_url, thread_id, page_id) # print("Getting file {}".format(url)) page = requests.get(url, cookies=cookies) # print("Pickle target: {}".format(rawfileName(thread_id, page_id))) #Dump page immediately, since html from string sometimes excepts due to encoder problems pickle.dump(page, open(rawfileName(thread_id, page_id), "wb") ) try: tree = html.document_fromstring(page.content) except Exception as e: # try reading as text encoded as utf-8? tree = html.document_fromstring(page.text) next_page = "page{}".format(page_id+1) have_next = False for x in tree.iterlinks(): if next_page in x[2]: have_next = True break with open(htmlFileName(thread_id, page_id), 'wb') as f: f.write(html.tostring(tree)) return have_next def single_thread(thread_id): page_id = 1 if os.path.exists(rawfileName(thread_id, page_id)) and os.path.exists(htmlFileName(thread_id, page_id)): if not do_update: # print("Thread {} already fetched".format(thread_id)) return while True: if os.path.exists(rawfileName(thread_id, page_id+1)): page_id += 1 else: break # print("Starting update for thread {} from page {}".format(thread_id, page_id)) ## page_id now points to the last valid page while single_page(thread_id, page_id): page_id += 1 # print("Thread {} had {} pages".format(thread_id, page_id)) def safe_single_thread(thread_id): # print("Getting thread {}".format(thread_id)) try: single_thread(thread_id) except Exception as e: print("Failed to fetch thread {}: {}".format(thread_id, e)) #encode problems: # safe_single_thread(292045) # safe_single_thread(195823) # safe_single_thread(last_thread_id) # sys.exit(0) with concurrent.futures.ThreadPoolExecutor(max_workers=num_parallel) as executor: bar = Bar('Processing', max=last_thread_id-first_thread_id) thread_id = last_thread_id active_futures = set() while thread_id > first_thread_id: while len(active_futures) < num_parallel: if thread_id <= first_thread_id: break active_futures.add( executor.submit(safe_single_thread, thread_id) ) thread_id -= 1 bar.next() # wait for any future to finish and remove it from active_futures finished_futures = concurrent.futures.wait(active_futures, None, concurrent.futures.FIRST_COMPLETED) for x in finished_futures.done: active_futures.remove(x) concurrent.futures.wait(active_futures, None, concurrent.futures.ALL_COMPLETED) bar.finish()
Gibts einen grund weshalb du nicht die Druckversion nimmst? (printthread.php)
-
- Administrator
- Beiträge: 23012
- Registriert: Jan 2000
- Wohnort: NRW
- Kontaktdaten:
Ich ziehe auch die "richtige" Version - bei der Printversion kriegt man zwar die Texte, aber das verliert auch einfach den ganzen Flair des Forums..Argon hat geschrieben:Ah wunderbar. Später mal ausprobieren. Ich bereite mich gedanklich schon auf die Abschaltung von inWc vor.
Gibts einen grund weshalb du nicht die Druckversion nimmst? (printthread.php)
-
- Ranger
- Beiträge: 4
- Registriert: Mär 2005
Ok, macht sinn. Dachte nur die Druckversien sollte etwas "leichter" sein, je nachdem welche Datenmenge sich dabei ergibt.
Gibts seitens ingame server ein rate limit/ban? Dann würd ich noch delays rein packen bevor ich anfang.
Gibts seitens ingame server ein rate limit/ban? Dann würd ich noch delays rein packen bevor ich anfang.
Ich komm von nebenanAgrazitat hat geschrieben:Dein erster Beitrag seit 2005?
Bist du Feuerwehrmann?
-
- Wrack
- Beiträge: 488
- Registriert: Dez 2002
-
- Anarki
- Beiträge: 1726
- Registriert: Apr 2001
- Kontaktdaten:
bin in dem pq.eu-forum und werde auch den weg ins discord finden. war gestern kurz da, hab aber nicht gerafft wie ich mit meiner eigentlichen mailadresse und anderem namen einen zweiten server joinen kann. moderne welt und so. IRC war einfacherEviLsEyE hat geschrieben:Benni!!1 <3
Sehr gerne
Falls das Forum ab morgen doch tot ist - auf welchem Wege kann man Dich sonst noch erreichen?
Bist Du schon im Discord? Sonst Signal/Threema?
werd die tage also auch im discord auftauchen
-
- Sarge
- Beiträge: 127
- Registriert: Feb 2017
Toll... da wollte ich nach Jahren wieder das Trollen anfangen und dann wird hier dicht gemacht. Forlani ich mach Dich nieder... sag einen Preis für das Forum:
https://youtu.be/CwE4mk2fbow?t=20
https://youtu.be/CwE4mk2fbow?t=20
-
- Ranger
- Beiträge: 4
- Registriert: Mär 2005
Die Ordner sind nur zur Zierde? Gut, das hinterher zu verschieben ist das kleinste Problem.EviLsEyE hat geschrieben:Ich ziehe auch die "richtige" Version - bei der Printversion kriegt man zwar die Texte, aber das verliert auch einfach den ganzen Flair des Forums..
Rattert und schaut gut aus. Hoffe das läuft durch. Danke schonmal!
-
- Dopefish
- Beiträge: 4583
- Registriert: Jun 2005
- Wohnort: Stuttgart
Hey Thilo,thg hat geschrieben:Tschüss PQ... War schön mit dir *schnüff*
Die schönen Zeiten sind eh längst vorbei, aber die Erinnerungen bleiben
Juyo - bist du auf Skype oder so noch erreichbar?
bin auf diesem Discord jetzt
Skype habe ich nicht mehr. ( Schick Dir gleich aber ne PM mit meiner Tel. Nr. )
いつでも捜しているよ どっかに君の姿を
-
- Ranger
- Beiträge: 4
- Registriert: Mär 2005
Hab da gar nicht weiter rein geschaut, lad jetzt auch die normale Version. Dachte echt nur aus Platzgründen dran. Aber am Ende vom Tag ist das ja alles Text, komprimiert also ziemlich gut.50493D33 hat geschrieben:printthread.php kannte ich nicht. Sind da denn die ids etc. im html drin? Die "richtige" Version ist mit so vielen Metadaten voll, dass man da relativ einfach fast das ganze Forum rekonstruieren kann.
Wenn fertig könnte man alles mit Xapian indizieren und dann sogar ne gute Suche drumrum basteln.
-
- Defense
- Beiträge: 7746
- Registriert: Okt 2001
- Wohnort: pq.de
-
- Defense
- Beiträge: 7192
- Registriert: Dez 2000
- Wohnort: Berlin
-
- Uriel
- Beiträge: 2876
- Registriert: Jul 2010
- Steam: FloWzoW
- Kontaktdaten:
-
- Excellent
- Beiträge: 11038
- Registriert: Aug 2003
- Wohnort: Köln
-
- Assist
- Beiträge: 5395
- Registriert: Mai 2003
- Wohnort: #hirnfick
Frylock: You know, I think I've finally found a good use for the TV.
Master Shake: You put that right back upstairs!
Frylock: No.
Master Shake: Well, then, you help me move down my chair down here so I can watch it. HERE!
Frylock: No, I won't.
Master Shake: Uh... well... I will pee all over my pants, and THEN who's gonna end up looking bad? Huh?
Frylock: You just stay down here with your TV and fucking shove it.
Master Shake: ... Well, maybe I WILL!
-
- Bones
- Beiträge: 3024
- Registriert: Apr 2001
Mich kennt zwar niemand mehr hier und ich hab hier auch nur noch 1x pro Jahr reingeschaut, aber gerade in den Anfangszeiten von Q3A habe ich hier sehr viel Zeit verbracht. Von daher auch von mir ein fettes Schade, danke für die gute Zeit und Tschööööö!
TITANIC-Leser stellen sich vor
Heute: Thorsten T. aus Googlemail.com
Betreff: es gibt kein betreff, hehe.
Datum: Wed, 11 Nov 2009 20:06:35 +0100
Von: Thorsten T*****
absolut bemittleidenswert was ihr macht. euch sollte man wie die juden vergasen und davor eure kinder vor euren augen bei lebendigen leib verbrennen. kein respekt vor der würde des menschen. richtig behindert seid ihr. das hat überhaupt nichts mehr mit satire zu tun.
Heute: Thorsten T. aus Googlemail.com
Betreff: es gibt kein betreff, hehe.
Datum: Wed, 11 Nov 2009 20:06:35 +0100
Von: Thorsten T*****
absolut bemittleidenswert was ihr macht. euch sollte man wie die juden vergasen und davor eure kinder vor euren augen bei lebendigen leib verbrennen. kein respekt vor der würde des menschen. richtig behindert seid ihr. das hat überhaupt nichts mehr mit satire zu tun.