An Deinen Nick erinnere ich mich, aber Du hattest vorher einen anderen - wie war der noch mal? An einen 2001er erinnert man sich bestimmt noch..realgeizt hat geschrieben: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ööööö!
Sexy pq.de (20) tot?
-
- Administrator
- Beiträge: 23012
- Registriert: Jan 2000
- Wohnort: NRW
- Kontaktdaten:
-
- Defense
- Beiträge: 7192
- Registriert: Dez 2000
- Wohnort: Berlin
-
- Bones
- Beiträge: 3024
- Registriert: Apr 2001
Apocalypse Dude glaub ichEviLsEyE hat geschrieben:An Deinen Nick erinnere ich mich, aber Du hattest vorher einen anderen - wie war der noch mal? An einen 2001er erinnert man sich bestimmt noch..
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.
-
- Excellent
- Beiträge: 11599
- Registriert: Jan 2003
- Wohnort: München
- Steam: frost_bit
Wie sie alle aus ihren Löchern gekrochen kommen
Original geschrieben von spid
ich hab mir mit agony eine zeit lang "seltsame" sms ausgetauscht (so sachen wie "ich möchte in deinen eingeweiden sitzen und kräftig onanieren"), dummerweise hatte meine schwester sich mal mein handy geschnappt, die sms gesehn und meiner mutter gezeigt
sie dachte ziemlich lange ich wär schwul :X
-
- Capture
- Beiträge: 6294
- Registriert: Nov 2001
Man beachte meine Signatur - wer auch immer Henning war, aber das war der Tenor damalsjuyotoken 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.
henning hat geschrieben:L'etat c'est Peter.
-
- Defense
- Beiträge: 7361
- Registriert: Jul 2002
Ich hätte da ne Mega Idee - ich könnte einen AMG kaufen für einen guten Preis und den dann in 3 Monaten mit Gewinn wieder verkaufen
"Die Signatur der modernen Welt sind Angst und Depressionen"
Die Welt zu sehen heißt nicht sie zu verstehen und wenn du meinst sie zu verstehen, dann sage ich du bist blind[/CENTER]
Die Welt zu sehen heißt nicht sie zu verstehen und wenn du meinst sie zu verstehen, dann sage ich du bist blind[/CENTER]
-
- Wrack
- Beiträge: 471
- Registriert: Mai 2001
-
- Perfect
- Beiträge: 9008
- Registriert: Jan 2002
Super Idee! Ich hab eine ähnliche Idee bei der Taxis involviert sind....caine hat geschrieben:Ich hätte da ne Mega Idee - ich könnte einen AMG kaufen für einen guten Preis und den dann in 3 Monaten mit Gewinn wieder verkaufen
But then you risk pebbles and small rocks shotting up off the front tires, bouncing off a chassis tube, and hitting you in the nuts.
I read that true story on the Atom forum..
I read that true story on the Atom forum..
-
- Administrator
- Beiträge: 23012
- Registriert: Jan 2000
- Wohnort: NRW
- Kontaktdaten:
-
- Razor
- Beiträge: 1752
- Registriert: Apr 2001
- Wohnort: Berlin
- Steam: Jott_Jott
- Kontaktdaten:
Neinnein, keine dummen Ideen um vier Uhr morgens!shiboyu hat geschrieben:Super Idee! Ich hab eine ähnliche Idee bei der Taxis involviert sind....
Viel besser sind Wetten mit rückwärts einparken. Bei denen man verliert und... sagen wir mal einen Dreier gewinnt?
"Design is not just what it looks like and feels like. Design is how it works."
-
- Patriot
- Beiträge: 1386
- Registriert: Mär 2001
- Wohnort: Berlin
- Kontaktdaten:
-
- Sarge
- Beiträge: 125
- Registriert: Nov 2010
-
- Patriot
- Beiträge: 1412
- Registriert: Nov 2008
-
- Tank Jr.
- Beiträge: 982
- Registriert: Mär 2001
- Wohnort: Ingolstadt
- Kontaktdaten:
Quake 3 und die Community hier war ein Teil meiner Kindheit und Jugend (ich war 13 als ich mich hier angemeldet habe!). Es stimmt mich traurig zu erfahren dass dieses Forum bald verschwinden soll.
Ich verstehe auch nicht wieso. Speicherplatz und Traffic dieser Seite sind schon lange kein kritischer Punkt mehr. Und den Verwaltungsaufwand kann man ja auch gerne abgeben (es haben sich hier im Thread ja schon einige gemeldet).
Es war eine schöne Zeit hier und in den diversen IRC Channels. So viel Nostalgie und Internet-Historie. Ich bin froh Teil dieser Generation zu sein, und nicht mit dem verweichlichten Social Media Platformen von heute groß zu werden.
Ich habe auch erst heute vom discord Server gelesen und bin seitdem dort zu finden.
Ich verstehe auch nicht wieso. Speicherplatz und Traffic dieser Seite sind schon lange kein kritischer Punkt mehr. Und den Verwaltungsaufwand kann man ja auch gerne abgeben (es haben sich hier im Thread ja schon einige gemeldet).
Es war eine schöne Zeit hier und in den diversen IRC Channels. So viel Nostalgie und Internet-Historie. Ich bin froh Teil dieser Generation zu sein, und nicht mit dem verweichlichten Social Media Platformen von heute groß zu werden.
Ich habe auch erst heute vom discord Server gelesen und bin seitdem dort zu finden.
-
- Administrator
- Beiträge: 23012
- Registriert: Jan 2000
- Wohnort: NRW
- Kontaktdaten:
Ich muss nochmal an dieser Stelle großen Dank loswerden!50493D33 hat geschrieben:Wie hast Du das hinbekommen?
Wget macht leider eine Breitensuche. Habe mir daher jetzt ein Skript gehackt um zumindest an den Text zu kommen. Aber wenn Du das schon hast, dann braucht es das ja nicht mehr.
Dein Beitrag, dieses Skript zu entwickeln und hier zur Verfügung zu stellen, hat m.E. enorm geholfen, die Sicherung des Forums eingermaßen unter die Leute zu bringen..
Nachdem ich die Ergebnisse meiner Leech-Orgien mit httrack und wget untersucht habe, stelle ich fest, dass da zwar ganz gut alle möglichen Grafiken und externen Dateien mitgespeichert wurden, die Forenbeiträge aber sehr willkürlich angesteuert wurden..
Hab daher noch mal mit Deinem Skript das ganze "Text"-Zeug zusätzlich geladen.
Danke!
-
- Razor
- Beiträge: 1866
- Registriert: Aug 2003
- Wohnort: Ka
- Kontaktdaten:
-
- Wrack
- Beiträge: 488
- Registriert: Dez 2002
Ich bin zwar nicht so aktiv hier, aber PQ gehört dann doch auch zu meinem Internet-Leben dazu. Ich habe mich mit 16 angemeldet, aber schon länger mitgelesen (immerhin kein 2003 Account ).EviLsEyE hat geschrieben:Ich muss nochmal an dieser Stelle großen Dank loswerden!
Dein Beitrag, dieses Skript zu entwickeln und hier zur Verfügung zu stellen, hat m.E. enorm geholfen, die Sicherung des Forums eingermaßen unter die Leute zu bringen..
Ich verstehe auch nicht, wieso man das Forum jetzt so plötzlich abschalten muss. Am Geld kann es ja kaum liegen, denn das geht doch garantiert im Rest unter.
Daran ändern können wir wohl nichts. Immerhin ist hoffentlich alles gesichert. Ich versuche mal in den nächsten Wochen noch ein Skript zu schreiben um die Daten in einem handlicheren Format zu haben, sodass man theoretisch einfach alles in ein anderes Forum importieren könnte.
Das Skript habe ich auch noch etwas überarbeitet, sodass nun auch Updates möglich sind.
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
import argparse
cap = argparse.ArgumentParser(description="Download quake.ingame.de/forum")
cap.add_argument('-t', help='Download threads. Downloads all if this is not given.', dest='t', nargs='+', type=int, required=False)
cap.add_argument('-u', help='Update current database', dest='u', action="store_true", required=False, default=False)
cap.add_argument('-v', help='Verbose', dest='v', action="store_true", required=False, default=False)
cap.add_argument('-w', help='Number of workers (=Number of parallel requests)', dest='w', nargs=1, type=int, required=False, default=1)
cap.add_argument('--split', help='Split dir: raw/html', dest='split', action="store_true", required=False, default=False)
cap.add_argument('--destination', help='Destination', dest='destination', nargs=1, type=str, required=False, default="./")
args = cap.parse_args()
base_url = "https://quake.ingame.de/forum/threads"
file_name_tmpl = "thread{}_page{}"
do_update = args.u
num_parallel = args.w
# first_thread_id= 0
first_thread_id = 180740 #This seems to be the first thread, even though it's from 2005
last_thread_id = 292842 #Currently the last one
cookies = {
"inToken" : "",
"bb_sessionhash" : "",
"PHPSESSID" : ""
}
if args.split:
pathlib.Path(args.destination[0], 'raw').mkdir(parents=True, exist_ok=True)
pathlib.Path(args.destination[0], 'html').mkdir(parents=True, exist_ok=True)
def rawfileName(thread_id, page_id):
file_name = file_name_tmpl.format(thread_id, page_id)
if args.split:
file_name = os.path.join("raw", file_name)
return os.path.join(args.destination[0], file_name)
def htmlFileName(thread_id, page_id):
file_name = "{}.html".format(file_name_tmpl.format(thread_id, page_id))
if args.split:
file_name = os.path.join("html", file_name)
return os.path.join(args.destination[0], 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)
#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("\nFailed to write thread {} page {}: {}\n".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:
if args.v:
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
if args.v:
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))
if args.t:
for thread_id in args.t:
if args.v:
print("Fetching thread {}".format(thread_id))
safe_single_thread(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()
-
- Administrator
- Beiträge: 23012
- Registriert: Jan 2000
- Wohnort: NRW
- Kontaktdaten: