worked on phab and wiki activity data collection
This commit is contained in:
parent
ab771e25b7
commit
60dfe7e0a2
266
src/helper_scripts/dump_collector.py
Normal file
266
src/helper_scripts/dump_collector.py
Normal file
@ -0,0 +1,266 @@
|
||||
import requests
|
||||
import bz2
|
||||
import shutil
|
||||
import os
|
||||
|
||||
import concurrent.futures
|
||||
|
||||
YEARLY_PROJECTS = [
|
||||
"dewiki", "frwiki", "eswiki", "itwiki", "ruwiki", "jawiki", "viwiki", "zhwiki",
|
||||
"ptwiki", "enwiktionary", "plwiki", "nlwiki", "svwiki", "metawiki", "arwiki",
|
||||
"shwiki", "cebwiki", "mgwiktionary", "fawiki", "frwiktionary", "ukwiki",
|
||||
"hewiki", "kowiki", "srwiki", "trwiki", "loginwiki", "huwiki", "cawiki",
|
||||
"nowiki", "mediawikiwiki", "fiwiki", "cswiki", "idwiki", "rowiki", "enwikisource",
|
||||
"frwikisource", "ruwiktionary", "dawiki", "bgwiki", "incubatorwiki",
|
||||
"enwikinews", "specieswiki", "thwiki"
|
||||
]
|
||||
|
||||
MONTHLY_PROJECTS = ["wikidatawiki", "commonswiki", "enwiki"]
|
||||
|
||||
ALL_PROJECTS = [
|
||||
"aawiki", "aawikibooks", "aawiktionary", "abwiki", "abwiktionary", "acewiki",
|
||||
"adywiki", "aewikimedia", "afwiki", "afwikibooks", "afwikiquote", "afwiktionary",
|
||||
"akwiki", "akwikibooks", "akwiktionary", "alswiki", "altwiki", "amiwiki",
|
||||
"amwiki", "amwikimedia", "amwikiquote", "amwiktionary", "angwiki", "angwikibooks",
|
||||
"angwikiquote", "angwikisource", "angwiktionary", "anpwiki", "anwiki",
|
||||
"anwiktionary", "arcwiki", "arwiki", "arwikibooks", "arwikimedia", "arwikinews",
|
||||
"arwikiquote", "arwikisource", "arwikiversity", "arwiktionary", "arywiki",
|
||||
"arzwiki", "astwiki", "astwikibooks", "astwikiquote", "astwiktionary", "aswiki",
|
||||
"aswikibooks", "aswikiquote", "aswikisource", "aswiktionary", "atjwiki",
|
||||
"avkwiki", "avwiki", "avwiktionary", "awawiki", "aywiki", "aywikibooks",
|
||||
"aywiktionary", "azbwiki", "azwiki", "azwikibooks", "azwikiquote", "azwikisource",
|
||||
"azwiktionary", "banwiki", "banwikisource", "barwiki", "bat_smgwiki", "bawiki",
|
||||
"bawikibooks", "bbcwiki", "bclwiki", "bclwikiquote", "bclwiktionary", "bdwikimedia",
|
||||
"be_x_oldwiki", "betawikiversity", "bewiki", "bewikibooks", "bewikimedia",
|
||||
"bewikiquote", "bewikisource", "bewiktionary", "bewwiki", "bgwiki", "bgwikibooks",
|
||||
"bgwikinews", "bgwikiquote", "bgwikisource", "bgwiktionary", "bhwiki",
|
||||
"bhwiktionary", "biwiki", "biwikibooks", "biwiktionary", "bjnwiki",
|
||||
"bjnwikiquote", "bjnwiktionary", "blkwiki", "blkwiktionary", "bmwiki",
|
||||
"bmwikibooks", "bmwikiquote", "bmwiktionary", "bnwiki", "bnwikibooks", "bnwikiquote",
|
||||
"bnwikisource", "bnwikivoyage", "bnwiktionary", "bowiki", "bowikibooks",
|
||||
"bowiktionary", "bpywiki", "brwiki", "brwikimedia", "brwikiquote", "brwikisource",
|
||||
"brwiktionary", "bswiki", "bswikibooks", "bswikinews", "bswikiquote",
|
||||
"bswikisource", "bswiktionary", "btmwiki", "btmwiktionary", "bugwiki",
|
||||
"bxrwiki", "cawiki", "cawikibooks", "cawikimedia", "cawikinews", "cawikiquote",
|
||||
"cawikisource", "cawiktionary", "cbk_zamwiki", "cdowiki", "cebwiki",
|
||||
"cewiki", "chowiki", "chrwiki", "chrwiktionary", "chwiki", "chwikibooks",
|
||||
"chwiktionary", "chywiki", "ckbwiki", "ckbwiktionary", "cnwikimedia", "commonswiki",
|
||||
"cowiki", "cowikibooks", "cowikimedia", "cowikiquote", "cowiktionary",
|
||||
"crhwiki", "crwiki", "crwikiquote", "crwiktionary", "csbwiki", "csbwiktionary",
|
||||
"cswiki", "cswikibooks", "cswikinews", "cswikiquote", "cswikisource", "cswikiversity",
|
||||
"cswikivoyage", "cswiktionary", "cuwiki", "cvwiki", "cvwikibooks", "cywiki",
|
||||
"cywikibooks", "cywikiquote", "cywikisource", "cywiktionary", "dagwiki",
|
||||
"dawiki", "dawikibooks", "dawikiquote", "dawikisource", "dawiktionary",
|
||||
"dewiki", "dewikibooks", "dewikinews", "dewikiquote", "dewikisource",
|
||||
"dewikiversity", "dewikivoyage", "dewiktionary", "dgawiki", "dinwiki", "diqwiki",
|
||||
"diqwiktionary", "dkwikimedia", "donatewiki", "dsbwiki", "dtpwiki", "dtywiki",
|
||||
"dvwiki", "dvwiktionary", "dzwiki", "dzwiktionary", "eewiki", "elwiki",
|
||||
"elwikibooks", "elwikinews", "elwikiquote", "elwikisource", "elwikiversity",
|
||||
"elwikivoyage", "elwiktionary", "emlwiki", "enwiki", "enwikibooks", "enwikinews",
|
||||
"enwikiquote", "enwikisource", "enwikiversity", "enwikivoyage", "enwiktionary",
|
||||
"eowiki", "eowikibooks", "eowikinews", "eowikiquote", "eowikisource", "eowikivoyage",
|
||||
"eowiktionary", "eswiki", "eswikibooks", "eswikinews", "eswikiquote", "eswikisource",
|
||||
"eswikiversity", "eswikivoyage", "eswiktionary", "etwiki", "etwikibooks",
|
||||
"etwikimedia", "etwikiquote", "etwikisource", "etwiktionary", "euwiki", "euwikibooks",
|
||||
"euwikiquote", "euwikisource", "euwiktionary", "extwiki", "fatwiki", "fawiki",
|
||||
"fawikibooks", "fawikinews", "fawikiquote", "fawikisource", "fawikivoyage",
|
||||
"fawiktionary", "ffwiki", "fiu_vrowiki", "fiwiki", "fiwikibooks", "fiwikimedia",
|
||||
"fiwikinews", "fiwikiquote", "fiwikisource", "fiwikiversity", "fiwikivoyage",
|
||||
"fiwiktionary", "fjwiki", "fjwiktionary", "fonwiki", "foundationwiki", "fowiki",
|
||||
"fowikisource", "fowiktionary", "frpwiki", "frrwiki", "frwiki", "frwikibooks",
|
||||
"frwikinews", "frwikiquote", "frwikisource", "frwikiversity", "frwikivoyage",
|
||||
"frwiktionary", "furwiki", "fywiki", "fywikibooks", "fywiktionary", "gagwiki",
|
||||
"ganwiki", "gawiki", "gawikibooks", "gawikiquote", "gawiktionary", "gcrwiki",
|
||||
"gdwiki", "gdwiktionary", "glkwiki", "glwiki", "glwikibooks", "glwikiquote",
|
||||
"glwikisource", "glwiktionary", "gnwiki", "gnwikibooks", "gnwiktionary",
|
||||
"gomwiki", "gomwiktionary", "gorwiki", "gorwiktionary", "gotwiki", "gotwikibooks",
|
||||
"gpewiki", "gucwiki", "gurwiki", "guwiki", "guwikibooks", "guwikiquote",
|
||||
"guwikisource", "guwiktionary", "guwwiki", "guwwikinews", "guwwikiquote",
|
||||
"guwwiktionary", "gvwiki", "gvwiktionary", "hakwiki", "hawiki", "hawiktionary",
|
||||
"hawwiki", "hewiki", "hewikibooks", "hewikinews", "hewikiquote", "hewikisource",
|
||||
"hewikivoyage", "hewiktionary", "hifwiki", "hifwiktionary", "hiwiki", "hiwikibooks",
|
||||
"hiwikimedia", "hiwikiquote", "hiwikisource", "hiwikiversity", "hiwikivoyage",
|
||||
"hiwiktionary", "howiki", "hrwiki", "hrwikibooks", "hrwikiquote", "hrwikisource",
|
||||
"hrwiktionary", "hsbwiki", "hsbwiktionary", "htwiki", "htwikisource", "huwiki",
|
||||
"huwikibooks", "huwikinews", "huwikiquote", "huwikisource", "huwiktionary",
|
||||
"hywiki", "hywikibooks", "hywikiquote", "hywikisource", "hywiktionary",
|
||||
"hywwiki", "hzwiki", "iawiki", "iawikibooks", "iawiktionary", "idwiki",
|
||||
"idwikibooks", "idwikimedia", "idwikiquote", "idwikisource", "idwiktionary",
|
||||
"iewiki", "iewikibooks", "iewiktionary", "iglwiki", "igwiki", "igwikiquote",
|
||||
"igwiktionary", "iiwiki", "ikwiki", "ikwiktionary", "ilowiki", "incubatorwiki",
|
||||
"inhwiki", "iowiki", "iowiktionary", "iswiki", "iswikibooks", "iswikiquote",
|
||||
"iswikisource", "iswiktionary", "itwiki", "itwikibooks", "itwikinews",
|
||||
"itwikiquote", "itwikisource", "itwikiversity", "itwikivoyage", "itwiktionary",
|
||||
"iuwiki", "iuwiktionary", "jamwiki", "jawiki", "jawikibooks", "jawikinews",
|
||||
"jawikiquote", "jawikisource", "jawikiversity", "jawikivoyage", "jawiktionary",
|
||||
"jbowiki", "jbowiktionary", "jvwiki", "jvwikisource", "jvwiktionary",
|
||||
"kaawiki", "kaawiktionary", "kabwiki", "kawiki", "kawikibooks", "kawikiquote",
|
||||
"kawiktionary", "kbdwiki", "kbdwiktionary", "kbpwiki", "kcgwiki", "kcgwiktionary",
|
||||
"kgwiki", "kiwiki", "kjwiki", "kkwiki", "kkwikibooks", "kkwikiquote", "kkwiktionary",
|
||||
"klwiki", "klwiktionary", "kmwiki", "kmwikibooks", "kmwiktionary", "knwiki",
|
||||
"knwikibooks", "knwikiquote", "knwikisource", "knwiktionary", "koiwiki",
|
||||
"kowiki", "kowikibooks", "kowikinews", "kowikiquote", "kowikisource",
|
||||
"kowikiversity", "kowiktionary", "krcwiki", "krwiki", "krwikiquote",
|
||||
"kshwiki", "kswiki", "kswikibooks", "kswikiquote", "kswiktionary", "kuswiki",
|
||||
"kuwiki", "kuwikibooks", "kuwikiquote", "kuwiktionary", "kvwiki", "kwwiki",
|
||||
"kwwikiquote", "kwwiktionary", "kywiki", "kywikibooks", "kywikiquote",
|
||||
"kywiktionary", "labswiki", "ladwiki", "lawiki", "lawikibooks", "lawikiquote",
|
||||
"lawikisource", "lawiktionary", "lbewiki", "lbwiki", "lbwikibooks", "lbwikiquote",
|
||||
"lbwiktionary", "lezwiki", "lfnwiki", "lgwiki", "lijwiki", "lijwikisource",
|
||||
"liwiki", "liwikibooks", "liwikinews", "liwikiquote", "liwikisource", "liwiktionary",
|
||||
"lldwiki", "lmowiki", "lmowiktionary", "lnwiki", "lnwikibooks", "lnwiktionary",
|
||||
"loginwiki", "lowiki", "lowiktionary", "lrcwiki", "ltgwiki", "ltwiki",
|
||||
"ltwikibooks", "ltwikiquote", "ltwikisource", "ltwiktionary", "lvwiki",
|
||||
"lvwikibooks", "lvwiktionary", "madwiki", "maiwiki", "maiwikimedia", "map_bmswiki", "mdfwiki", "mediawikiwiki",
|
||||
"metawiki", "mgwiki", "mgwikibooks", "mgwiktionary", "mhrwiki", "mhwiki",
|
||||
"mhwiktionary", "minwiki", "minwiktionary", "miwiki", "miwikibooks", "miwiktionary",
|
||||
"mkwiki", "mkwikibooks", "mkwikimedia", "mkwikisource", "mkwiktionary", "mlwiki",
|
||||
"mlwikibooks", "mlwikiquote", "mlwikisource", "mlwiktionary", "mniwiki", "mniwiktionary",
|
||||
"mnwiki", "mnwikibooks", "mnwiktionary", "mnwwiki", "mnwwiktionary", "mrjwiki",
|
||||
"mrwiki", "mrwikibooks", "mrwikiquote", "mrwikisource", "mrwiktionary", "mswiki",
|
||||
"mswikibooks", "mswikisource", "mswiktionary", "mtwiki", "mtwiktionary", "muswiki",
|
||||
"mwlwiki", "mxwikimedia", "myvwiki", "mywiki", "mywikibooks", "mywiktionary",
|
||||
"mznwiki", "nahwiki", "nahwikibooks", "nahwiktionary", "napwiki", "napwikisource",
|
||||
"nawiki", "nawikibooks", "nawikiquote", "nawiktionary", "nds_nlwiki", "ndswiki",
|
||||
"ndswikibooks", "ndswikiquote", "ndswiktionary", "newiki", "newikibooks",
|
||||
"newiktionary", "newwiki", "ngwiki", "niawiki", "niawiktionary", "nlwiki",
|
||||
"nlwikibooks", "nlwikimedia", "nlwikinews", "nlwikiquote", "nlwikisource",
|
||||
"nlwikivoyage", "nlwiktionary", "nnwiki", "nnwikiquote", "nnwiktionary",
|
||||
"nostalgiawiki", "novwiki", "nowiki", "nowikibooks", "nowikimedia", "nowikinews",
|
||||
"nowikiquote", "nowikisource", "nowiktionary", "nqowiki", "nrmwiki", "nsowiki",
|
||||
"nvwiki", "nycwikimedia", "nywiki", "nzwikimedia", "ocwiki", "ocwikibooks",
|
||||
"ocwiktionary", "olowiki", "omwiki", "omwiktionary", "orwiki", "orwikisource",
|
||||
"orwiktionary", "oswiki", "outreachwiki", "pagwiki", "pamwiki", "papwiki",
|
||||
"pawiki", "pawikibooks", "pawikisource", "pawiktionary", "pcdwiki", "pcmwiki",
|
||||
"pdcwiki", "pflwiki", "pihwiki", "piwiki", "piwiktionary", "plwiki", "plwikibooks",
|
||||
"plwikimedia", "plwikinews", "plwikiquote", "plwikisource", "plwikivoyage",
|
||||
"plwiktionary", "pmswiki", "pmswikisource", "pnbwiki", "pnbwiktionary", "pntwiki",
|
||||
"pswiki", "pswikibooks", "pswikivoyage", "pswiktionary", "ptwiki", "ptwikibooks",
|
||||
"ptwikimedia", "ptwikinews", "ptwikiquote", "ptwikisource", "ptwikiversity",
|
||||
"ptwikivoyage", "ptwiktionary", "pwnwiki", "quwiki", "quwikibooks", "quwikiquote",
|
||||
"quwiktionary", "rmwiki", "rmwikibooks", "rmwiktionary", "rmywiki", "rnwiki",
|
||||
"rnwiktionary", "roa_rupwiki", "roa_rupwiktionary", "roa_tarawiki", "rowiki",
|
||||
"rowikibooks", "rowikinews", "rowikiquote", "rowikisource", "rowikivoyage",
|
||||
"rowiktionary", "rswikimedia", "ruewiki", "ruwiki", "ruwikibooks", "ruwikimedia",
|
||||
"ruwikinews", "ruwikiquote", "ruwikisource", "ruwikiversity", "ruwikivoyage",
|
||||
"ruwiktionary", "rwwiki", "rwwiktionary", "sahwiki", "sahwikiquote", "sahwikisource",
|
||||
"satwiki", "sawiki", "sawikibooks", "sawikiquote", "sawikisource", "sawiktionary",
|
||||
"scnwiki", "scnwiktionary", "scowiki", "scwiki", "scwiktionary", "sdwiki",
|
||||
"sdwikinews", "sdwiktionary", "sewiki", "sewikibooks", "sewikimedia", "sgwiki",
|
||||
"sgwiktionary", "shiwiki", "shnwiki", "shnwikibooks", "shnwikivoyage",
|
||||
"shnwiktionary", "shwiki", "shwiktionary", "shywiktionary", "simplewiki",
|
||||
"simplewikibooks", "simplewikiquote", "simplewiktionary", "siwiki", "siwikibooks",
|
||||
"siwiktionary", "skrwiki", "skrwiktionary", "skwiki", "skwikibooks", "skwikiquote",
|
||||
"skwikisource", "skwiktionary", "slwiki", "slwikibooks", "slwikiquote",
|
||||
"slwikisource", "slwikiversity", "slwiktionary", "smnwiki", "smwiki", "smwiktionary",
|
||||
"snwiki", "snwiktionary", "sourceswiki", "sowiki", "sowiktionary", "specieswiki",
|
||||
"sqwiki", "sqwikibooks", "sqwikinews", "sqwikiquote", "sqwiktionary", "srnwiki",
|
||||
"srwiki", "srwikibooks", "srwikinews", "srwikiquote", "srwikisource", "srwiktionary",
|
||||
"sswiki", "sswiktionary", "stqwiki", "stwiki", "stwiktionary", "suwiki",
|
||||
"suwikibooks", "suwikiquote", "suwikisource", "suwiktionary", "svwiki",
|
||||
"svwikibooks", "svwikinews", "svwikiquote", "svwikisource", "svwikiversity",
|
||||
"svwikivoyage", "svwiktionary", "swwiki", "swwikibooks", "swwiktionary",
|
||||
"szlwiki", "szywiki", "tawiki", "tawikibooks", "tawikinews", "tawikiquote",
|
||||
"tawikisource", "tawiktionary", "taywiki", "tcywiki", "tenwiki", "test2wiki",
|
||||
"testwiki", "testwikidatawiki", "tetwiki", "tewiki", "tewikibooks", "tewikiquote",
|
||||
"tewikisource", "tewiktionary", "tgwiki", "tgwikibooks", "tgwiktionary",
|
||||
"thwiki", "thwikibooks", "thwikinews", "thwikiquote", "thwikisource", "thwiktionary",
|
||||
"tiwiki", "tiwiktionary", "tkwiki", "tkwikibooks", "tkwikiquote", "tkwiktionary",
|
||||
"tlwiki", "tlwikibooks", "tlwikiquote", "tlwiktionary", "tlywiki", "tnwiki",
|
||||
"tnwiktionary", "towiki", "towiktionary", "tpiwiki", "tpiwiktionary", "trvwiki",
|
||||
"trwiki", "trwikibooks", "trwikimedia", "trwikinews", "trwikiquote", "trwikisource",
|
||||
"trwikivoyage", "trwiktionary", "tswiki", "tswiktionary", "ttwiki", "ttwikibooks",
|
||||
"ttwikiquote", "ttwiktionary", "tumwiki", "twwiki", "twwiktionary", "tyvwiki",
|
||||
"tywiki", "uawikimedia", "udmwiki", "ugwiki", "ugwikibooks", "ugwikiquote",
|
||||
"ugwiktionary", "ukwiki", "ukwikibooks", "ukwikinews", "ukwikiquote", "ukwikisource",
|
||||
"ukwikivoyage", "ukwiktionary", "urwiki", "urwikibooks", "urwikiquote", "urwiktionary",
|
||||
"uzwiki", "uzwikibooks", "uzwikiquote", "uzwiktionary", "vecwiki", "vecwikisource",
|
||||
"vecwiktionary", "vepwiki", "vewiki", "viwiki", "viwikibooks", "viwikiquote",
|
||||
"viwikisource", "viwikivoyage", "viwiktionary", "vlswiki", "votewiki", "vowiki",
|
||||
"vowikibooks", "vowikiquote", "vowiktionary", "warwiki", "wawiki", "wawikibooks",
|
||||
"wawikisource", "wawiktionary", "wbwikimedia", "wikidatawiki", "wikifunctionswiki",
|
||||
"wikimania2015wiki", "wikimania2016wiki", "wikimania2017wiki", "wowiki",
|
||||
"wowikiquote", "wowiktionary", "wuuwiki", "xalwiki", "xhwiki", "xhwikibooks",
|
||||
"xhwiktionary", "xmfwiki", "yiwiki", "yiwikisource", "yiwiktionary", "yowiki",
|
||||
"yowikibooks", "yowiktionary", "yuewiktionary", "zawiki", "zawikibooks", "zawikiquote",
|
||||
"zawiktionary", "zeawiki", "zghwiki", "zh_classicalwiki", "zh_min_nanwiki",
|
||||
"zh_min_nanwikibooks", "zh_min_nanwikiquote", "zh_min_nanwikisource", "zh_min_nanwiktionary",
|
||||
"zh_yuewiki", "zhwiki", "zhwikibooks", "zhwikinews", "zhwikiquote", "zhwikisource",
|
||||
"zhwikiversity", "zhwikivoyage", "zhwiktionary", "zuwiki", "zuwikibooks", "zuwiktionary"
|
||||
]
|
||||
|
||||
DUMP = "2024-11"
|
||||
test_url = f"https://dumps.wikimedia.org/other/mediawiki_history/{DUMP}/aawiki/{DUMP}.aawiki.all-time.tsv.bz2"
|
||||
DUMP_LOC_PREFIX = f"https://dumps.wikimedia.org/other/mediawiki_history/{DUMP}/"
|
||||
FILE_LOC_PREFIX = "/data/users/mgaughan/mw-repo-lifecycles/wiki_activity_data/"
|
||||
|
||||
YEARS = ['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024']
|
||||
|
||||
def download_file(url):
|
||||
response = requests.get(url)
|
||||
if "content-disposition" in response.headers:
|
||||
content_disposition = response.headers["content-disposition"]
|
||||
filename = FILE_LOC_PREFIX + content_disposition.split("filename=")[1]
|
||||
else:
|
||||
filename = FILE_LOC_PREFIX + url.split("/")[-1]
|
||||
with open(filename, mode="wb") as file:
|
||||
file.write(response.content)
|
||||
print(f"Downloaded file {filename}")
|
||||
return filename
|
||||
|
||||
def decompress(filepath):
|
||||
decompressed_filepath = filepath[:-4]
|
||||
with bz2.BZ2File(filepath) as fr, open(decompressed_filepath,"wb") as fw:
|
||||
shutil.copyfileobj(fr,fw)
|
||||
print(f"Decompressed {decompressed_filepath}")
|
||||
#os.remove(filepath)
|
||||
print(f"Deleted {filepath}")
|
||||
|
||||
|
||||
def batch_parallel_for_yearly():
|
||||
urls = []
|
||||
for entry in YEARLY_PROJECTS:
|
||||
for year in YEARS:
|
||||
urls.append(f"{DUMP_LOC_PREFIX}{entry}/{DUMP}.{entry}.{year}.tsv.bz2")
|
||||
|
||||
|
||||
|
||||
|
||||
def batch_parallel_for_single():
|
||||
urls = []
|
||||
for entry in ALL_PROJECTS:
|
||||
if entry not in YEARLY_PROJECTS and entry not in MONTHLY_PROJECTS:
|
||||
urls.append(f"{DUMP_LOC_PREFIX}{entry}/{DUMP}.{entry}.all-time.tsv.bz2")
|
||||
for url in urls:
|
||||
download_file(url)
|
||||
'''
|
||||
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
|
||||
future_to_filepath = {executor.submit(download_file, url): url for url in urls}
|
||||
for future in concurrent.futures.as_completed(future_to_filepath):
|
||||
filepath = future_to_filepath[future]
|
||||
try:
|
||||
data = future
|
||||
except KeyboardInterrupt:
|
||||
print("Keyboard interrupt received, shutting down executor")
|
||||
executor.shutdown(wait=False, cancel_futures=True)
|
||||
except Exception as exc:
|
||||
print('generated an exception: %s' % (exc))
|
||||
'''
|
||||
|
||||
|
||||
def decompress_directory(directory_name):
|
||||
# Traverse the directory
|
||||
for root, dirs, files in os.walk(directory_name):
|
||||
for file in files:
|
||||
if file.endswith('.bz2'):
|
||||
# Full path to the file
|
||||
filepath = os.path.join(root, file)
|
||||
print(filepath)
|
||||
# Apply the decompress function
|
||||
decompress(filepath)
|
||||
|
||||
if __name__ == "__main__":
|
||||
batch_parallel_for_single()
|
||||
#decompress_directory(FILE_LOC_PREFIX)
|
||||
#file = download_file(test_url)
|
||||
#decompress("/data/users/mgaughan/mw-repo-lifecycles/wiki_activity_data/2024-11.zuwiktionary.all-time.tsv.bz2")
|
@ -8,24 +8,27 @@ file_location = "/data/users/mgaughan/mw-repo-lifecycles/commit_data/"
|
||||
repo_location = "/data/users/mgaughan/mw-repo-lifecycles/repo_artifacts/"
|
||||
|
||||
cst = datetime.timezone(datetime.timedelta(hours=-6))
|
||||
'''
|
||||
repos = {
|
||||
"core" : {
|
||||
"url": "https://gerrit.wikimedia.org/r/mediawiki/core",
|
||||
"from_date": datetime.datetime(2022, 9, 10, 00, 00, 00, tzinfo=cst),
|
||||
"to_date": datetime.datetime(2022, 10, 10, 00, 00, 00, tzinfo=cst)
|
||||
},
|
||||
"parsoid" :{
|
||||
"url": "https://gerrit.wikimedia.org/r/mediawiki/services/parsoid",
|
||||
"from_date": datetime.datetime(2024, 6, 10, 00, 00, 00, tzinfo=cst),
|
||||
"to_date": datetime.datetime(2024, 10, 10, 00, 00, 00, tzinfo=cst)
|
||||
"from_date": datetime.datetime(2012, 1, 1, 00, 00, 00, tzinfo=cst),
|
||||
"to_date": datetime.datetime(2014, 12, 31, 00, 00, 00, tzinfo=cst)
|
||||
},
|
||||
"visualeditor": {
|
||||
"url": "https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor",
|
||||
"from_date": datetime.datetime(2013, 5, 1, 00, 00, 00, tzinfo=cst),
|
||||
"to_date": datetime.datetime(2013, 10, 10, 00, 00, 00, tzinfo=cst)
|
||||
"from_date": datetime.datetime(2012, 1, 1, 00, 00, 00, tzinfo=cst),
|
||||
"to_date": datetime.datetime(2013, 5, 1, 00, 00, 00, tzinfo=cst)
|
||||
}
|
||||
}
|
||||
'''
|
||||
repos = {
|
||||
"visualeditor": {
|
||||
"url": "https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor",
|
||||
"from_date": datetime.datetime(2012, 1, 1, 00, 00, 00, tzinfo=cst),
|
||||
"to_date": datetime.datetime(2014, 12, 31, 00, 00, 00, tzinfo=cst)
|
||||
}
|
||||
}
|
||||
|
||||
for repo in repos.keys():
|
||||
print(repos[repo])
|
||||
print(repos[repo]['url'])
|
||||
|
@ -1,3 +0,0 @@
|
||||
import os
|
||||
import sys
|
||||
import wget
|
File diff suppressed because one or more lines are too long
@ -6,16 +6,8 @@ import pandas as pd
|
||||
import requests
|
||||
import re
|
||||
import datetime
|
||||
import time
|
||||
|
||||
# phab=Phabricator("https://phabricator.wikimedia.org/")
|
||||
tags = [
|
||||
"VisualEditor",
|
||||
"Parsoid"
|
||||
]
|
||||
|
||||
#set phabricator api token
|
||||
token = "api-wurg254ciq5uvfxlr4rszn5ynpy4"
|
||||
api_base = 'https://phabricator.wikimedia.org/api/'
|
||||
|
||||
# the query task taken from MGerlach's notebook
|
||||
def query_task_tag(
|
||||
@ -23,8 +15,8 @@ def query_task_tag(
|
||||
limit = 100,
|
||||
ts1 = None, ts2 = None,
|
||||
api_url_base = 'https://phabricator.wikimedia.org/api/maniphest.search',
|
||||
api_token = "api-wurg254ciq5uvfxlr4rszn5ynpy4"',
|
||||
sleep = 1,
|
||||
api_token = "api-wurg254ciq5uvfxlr4rszn5ynpy4",
|
||||
sleep = 10
|
||||
):
|
||||
'''
|
||||
query all tasks tagged with specific tag
|
||||
@ -38,17 +30,18 @@ def query_task_tag(
|
||||
RETURNS:
|
||||
- list of dictionary.
|
||||
'''
|
||||
|
||||
time.sleep(sleep)
|
||||
to_query = 1
|
||||
after = None
|
||||
|
||||
data = []
|
||||
|
||||
while to_query == 1:
|
||||
|
||||
time.sleep(sleep)
|
||||
params = {
|
||||
'api.token' : api_token,
|
||||
'constraints[tags]':tag_term, ## term that task is tagged with
|
||||
'constraints[query]':[tag_term], ## term that task is searched for with
|
||||
#'constraints[projects]':["VisualEditor"], ## term that task is tagged with
|
||||
'constraints[createdStart]':ts1, ## timestamp task creation (min)
|
||||
'constraints[createdEnd]':ts2, ## timestamp task creation (max)
|
||||
'limit':limit,
|
||||
@ -56,6 +49,58 @@ def query_task_tag(
|
||||
"attachments[subscribers]":"true",
|
||||
}
|
||||
|
||||
response = requests.get( api_url_base, params=params)
|
||||
print(response)
|
||||
result = json.loads(response.text)['result']
|
||||
print(result)
|
||||
## the data
|
||||
data_tmp = result['data']
|
||||
data += data_tmp
|
||||
## check if there are more results to query
|
||||
cursor = result['cursor']
|
||||
## if after == None, no more queries
|
||||
if cursor['after'] == None:
|
||||
to_query = 0
|
||||
## if after != None, query next page by passing after-argument
|
||||
else:
|
||||
after = cursor['after']
|
||||
return data
|
||||
|
||||
|
||||
|
||||
#also from MGerlach
|
||||
def query_transactions_phid_task(
|
||||
task_phid,
|
||||
limit = 100,
|
||||
api_url_base = 'https://phabricator.wikimedia.org/api/transaction.search',
|
||||
api_token = 'api-grocgdq2767cx6v5ywckkjmetx2f',
|
||||
sleep = 10,
|
||||
):
|
||||
'''
|
||||
query all transactions for a task (task_phid).
|
||||
OPTIONAL:
|
||||
- limit (int, default=100), number of results per query, cannot be larger than 100
|
||||
- sleep (int, default = 0), sleep between each query
|
||||
- api_url_base (str,) is the url for the api
|
||||
- api_token (str, default=martins token),
|
||||
|
||||
RETURNS:
|
||||
- list of dictionary.
|
||||
'''
|
||||
time.sleep(sleep)
|
||||
to_query = 1
|
||||
after = None
|
||||
|
||||
data = []
|
||||
|
||||
while to_query == 1:
|
||||
time.sleep(sleep)
|
||||
params = {
|
||||
'api.token' : api_token,
|
||||
'objectIdentifier':task_phid, ## task-phid
|
||||
'limit':limit,
|
||||
'after':after,
|
||||
}
|
||||
response = requests.get( api_url_base, params=params)
|
||||
result = json.loads(response.text)['result']
|
||||
|
||||
@ -72,18 +117,29 @@ def query_task_tag(
|
||||
after = cursor['after']
|
||||
return data
|
||||
|
||||
if __name__ == "__main__":
|
||||
# phab=Phabricator("https://phabricator.wikimedia.org/")
|
||||
tags = [
|
||||
"VisualEditor",
|
||||
"Parsoid"
|
||||
]
|
||||
#set phabricator api token
|
||||
token = "api-wurg254ciq5uvfxlr4rszn5ynpy4"
|
||||
api_base = 'https://phabricator.wikimedia.org/api/'
|
||||
|
||||
# for the search criteria of
|
||||
# the umbrella tag VisualEditor
|
||||
# open tasks
|
||||
# closed tasks
|
||||
# the umbrella tag of Parsoid?
|
||||
ve_ts1 = int(datetime.datetime.timestamp(datetime.datetime(2012, 1, 1, 0, 0, 0)))
|
||||
ve_ts2 = int(datetime.datetime.timestamp(datetime.datetime(2014, 12, 31, 0, 0, 0)))
|
||||
|
||||
# query
|
||||
# query for umbrella tag
|
||||
# in a given womdpw pf to,e
|
||||
# if open or closed
|
||||
ve_data = query_task_tag("VisualEditor", ts1=ve_ts1, ts2=ve_ts2)
|
||||
|
||||
|
||||
# then, for each task,
|
||||
# collect the comments with them
|
||||
for entry in ve_data:
|
||||
task_id = entry['phid']
|
||||
print(task_id)
|
||||
transactions = query_transactions_phid_task(task_id)
|
||||
comments = {}
|
||||
for item in transactions:
|
||||
comments[item['id']] = item['comments']
|
||||
entry['task_comments'] = comments
|
||||
DATA_PREFIX = "/data/users/mgaughan/mw-repo-lifecycles/phab_data/"
|
||||
with open(DATA_PREFIX + "visualeditor/" + "2012_1_1_to_2014_12_31.json", "w") as outfile1:
|
||||
json.dump(ve_data, outfile1)
|
||||
|
Loading…
Reference in New Issue
Block a user