Add files via upload

This commit is contained in:
Levent Duivel 2023-08-14 05:34:38 +05:00 committed by GitHub
parent d41c2e5fad
commit 544d2cbdc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 3469 additions and 0 deletions

16
Pipfile Normal file
View File

@ -0,0 +1,16 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
bs4 = "*"
lxml = "*"
requests = "*"
openpyxl = "*"
[dev-packages]
[requires]
python_version = "3.10"
python_full_version = "3.10.4"

272
Pipfile.lock generated Normal file
View File

@ -0,0 +1,272 @@
{
"_meta": {
"hash": {
"sha256": "8871c039e14bbf1832721a618b525d9e1c9e897c336eb813be3d1543abef854f"
},
"pipfile-spec": 6,
"requires": {
"python_full_version": "3.10.4",
"python_version": "3.10"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"beautifulsoup4": {
"hashes": [
"sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da",
"sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"
],
"markers": "python_full_version >= '3.6.0'",
"version": "==4.12.2"
},
"bs4": {
"hashes": [
"sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"
],
"index": "pypi",
"version": "==0.0.1"
},
"certifi": {
"hashes": [
"sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082",
"sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"
],
"markers": "python_version >= '3.6'",
"version": "==2023.7.22"
},
"charset-normalizer": {
"hashes": [
"sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96",
"sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c",
"sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710",
"sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706",
"sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020",
"sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252",
"sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad",
"sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329",
"sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a",
"sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f",
"sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6",
"sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4",
"sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a",
"sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46",
"sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2",
"sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23",
"sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace",
"sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd",
"sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982",
"sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10",
"sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2",
"sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea",
"sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09",
"sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5",
"sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149",
"sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489",
"sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9",
"sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80",
"sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592",
"sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3",
"sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6",
"sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed",
"sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c",
"sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200",
"sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a",
"sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e",
"sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d",
"sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6",
"sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623",
"sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669",
"sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3",
"sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa",
"sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9",
"sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2",
"sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f",
"sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1",
"sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4",
"sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a",
"sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8",
"sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3",
"sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029",
"sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f",
"sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959",
"sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22",
"sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7",
"sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952",
"sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346",
"sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e",
"sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d",
"sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299",
"sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd",
"sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a",
"sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3",
"sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037",
"sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94",
"sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c",
"sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858",
"sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a",
"sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449",
"sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c",
"sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918",
"sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1",
"sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c",
"sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac",
"sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"
],
"markers": "python_full_version >= '3.7.0'",
"version": "==3.2.0"
},
"et-xmlfile": {
"hashes": [
"sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c",
"sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"
],
"markers": "python_version >= '3.6'",
"version": "==1.1.0"
},
"idna": {
"hashes": [
"sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4",
"sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"
],
"markers": "python_version >= '3.5'",
"version": "==3.4"
},
"lxml": {
"hashes": [
"sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3",
"sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d",
"sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a",
"sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120",
"sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305",
"sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287",
"sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23",
"sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52",
"sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f",
"sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4",
"sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584",
"sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f",
"sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693",
"sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef",
"sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5",
"sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02",
"sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc",
"sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7",
"sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da",
"sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a",
"sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40",
"sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8",
"sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd",
"sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601",
"sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c",
"sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be",
"sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2",
"sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c",
"sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129",
"sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc",
"sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2",
"sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1",
"sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7",
"sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d",
"sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477",
"sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d",
"sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e",
"sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7",
"sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2",
"sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574",
"sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf",
"sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b",
"sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98",
"sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12",
"sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42",
"sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35",
"sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d",
"sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce",
"sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d",
"sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f",
"sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db",
"sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4",
"sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694",
"sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac",
"sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2",
"sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7",
"sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96",
"sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d",
"sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b",
"sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a",
"sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13",
"sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340",
"sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6",
"sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458",
"sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c",
"sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c",
"sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9",
"sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432",
"sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991",
"sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69",
"sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf",
"sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb",
"sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b",
"sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833",
"sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76",
"sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85",
"sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e",
"sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50",
"sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8",
"sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4",
"sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b",
"sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5",
"sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190",
"sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7",
"sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa",
"sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0",
"sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9",
"sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0",
"sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b",
"sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5",
"sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7",
"sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"
],
"index": "pypi",
"version": "==4.9.3"
},
"openpyxl": {
"hashes": [
"sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184",
"sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"
],
"index": "pypi",
"version": "==3.1.2"
},
"requests": {
"hashes": [
"sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f",
"sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"
],
"index": "pypi",
"version": "==2.31.0"
},
"soupsieve": {
"hashes": [
"sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8",
"sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"
],
"markers": "python_version >= '3.7'",
"version": "==2.4.1"
},
"urllib3": {
"hashes": [
"sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11",
"sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"
],
"markers": "python_version >= '3.7'",
"version": "==2.0.4"
}
},
"develop": {}
}

32
add_banner.py Normal file
View File

@ -0,0 +1,32 @@
import json
from contextlib import suppress
def main():
banner_history = [] # Used for suppression
with suppress(FileNotFoundError, json.decoder.JSONDecodeError):
with open('banner_history.json', 'r') as f:
banner_history = json.load(f)
when = input('When did you see banner update (UNIX timestamp)? ')
banner_count = int(input('How many banners did you see? '))
for i in range(banner_count):
banner = input('Enter a banner name: ')
banner_type = input('What type of banner was it ([W]eapon/[C]haracter/[2]-nd Character)? ')
banner_type = banner_type.lower()
if banner_type == 'w':
banner_type = '301'
elif banner_type == 'c':
banner_type = '302'
elif banner_type == '2':
banner_type = '400'
banner_history.append({'banner': banner, 'when': when, 'type': banner_type})
with open('banner_history.json', 'w') as f:
json.dump(banner_history, f, indent=4)
if __name__ == '__main__':
print("Deprecated! Use banner_parser.py instead.")
# main()

1262
banner_history.json Normal file

File diff suppressed because it is too large Load Diff

107
banner_parser.py Normal file
View File

@ -0,0 +1,107 @@
import json
import requests
from bs4 import BeautifulSoup, Tag
from datetime import date, time, datetime, timezone, timedelta
YOUR_GENSHIN_REGION = "Europe" # Possible values: "Europe", "America", "Asia"
def proper_timezone():
if YOUR_GENSHIN_REGION.lower().startswith("am"):
tz = timezone(timedelta(hours=-5))
elif YOUR_GENSHIN_REGION.lower().startswith("as"):
tz = timezone(timedelta(hours=8))
else: # YOUR_GENSHIN_REGION.lower().startswith("eu")
tz = timezone(timedelta(hours=1))
return tz
def load_page():
url = 'https://genshin-impact.fandom.com/wiki/Wish/History'
r = requests.get(url)
return r.text
def load_page_static():
with open('banner_history_wiki\Wish History _ Genshin Impact Wiki _ Fandom.html', 'r') as f:
return f.read()
def parse_table(table: Tag):
header = table.find('thead')
header_row = header.find('tr')
header_cells = header_row.find_all('th')
header_titles = [x.text.strip() for x in header_cells]
# print(header_titles)
if header_titles[0] != 'Wish':
print('Skipping table {}, possible table was reformatted since parser was written'.format(header_titles))
return None
body = table.find('tbody')
body_rows = body.find_all('tr')
reset_time = time(hour=5, minute=0, second=0) # UTC+1 == Europe
banners = []
last_banner_time = None
for body_row in body_rows:
body_cells = body_row.find_all('td')
body_values = [x.text.strip() for x in body_cells]
banner_name = body_values[0]
if banner_name in ["Beginners' Wish", "Wanderlust Invocation"] or "TBA" in body_values[2]:
continue
banner_date = [x for x in banner_name.split(' ') if x.startswith('20')][0]
banner_name = " ".join(banner_name.split(" ")[:-1]).strip()
banner_type = "301" if banner_name != "Epitome Invocation" else "302"
banner_date += " 04:00:00"
banner_dt = datetime.strptime(banner_date, '%Y-%m-%d %H:%M:%S')
tz = proper_timezone()
banner_dt = banner_dt.astimezone(tz)
banner_when = int(banner_dt.timestamp())
second_character_wish = all([
last_banner_time is not None,
last_banner_time == banner_when, # First character wish was present
banner_type == "301" # Character wish
])
if second_character_wish:
print(second_character_wish)
banner_type = "400"
last_banner_time = banner_when
banners.append({
'name': banner_name,
'type': banner_type,
'when': banner_when,
})
return banners
def parse_page(page_text):
results = []
soup = BeautifulSoup(page_text, 'lxml')
tables = soup.find_all('table', class_='article-table alternating-colors-table sortable jquery-tablesorter')
for table in tables:
results += parse_table(table)
return results
def main():
page = load_page_static()
banners = parse_page(page)
with open('banner_history.json', 'w') as f:
json.dump(banners, f, indent=4)
if __name__ == '__main__':
main()

BIN
generated_history.xlsx Normal file

Binary file not shown.

1612
genshin_wish_history.json Normal file

File diff suppressed because it is too large Load Diff

168
main.py Normal file
View File

@ -0,0 +1,168 @@
import json
from typing import List, Dict, Optional
import openpyxl
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from datetime import datetime
def load_banner_history():
with open('banner_history.json', 'r') as f:
banners = json.load(f)
return banners
def convert_to_hg_format():
return
def load_banner_history_xlsx():
workbook: Workbook = openpyxl.load_workbook('paimonmoe_wish_history.xlsx')
workbook[0]: Worksheet
pass
def find_banner(banners: List[Dict], wish: Dict) -> Optional[Dict]:
# Convert the time string in the wish to a UNIX timestamp
wish_time = datetime.strptime(wish['time'], '%Y-%m-%d %H:%M:%S').timestamp()
split_banners = {}
for banner in banners:
if not split_banners.get(banner['type']):
split_banners[banner['type']] = []
split_banners[banner['type']].append(banner)
# sort banners
for banner_type in split_banners:
split_banners[banner_type] = sorted(split_banners[banner_type], key=lambda x: x['when'], reverse=False)
if wish['gacha_type'] not in split_banners.keys():
return None
proper_banners = split_banners[wish['gacha_type']]
for i, banner in enumerate(proper_banners):
# If gacha_type matches
# print(f'banner: {banner} | {datetime.fromtimestamp(banner["when"])}')
# If wish_time is within the banner's time range
after_start = banner['when'] <= wish_time
before_end = i == len(proper_banners) - 1 or wish_time < proper_banners[i + 1]['when']
# print(f'after_start: {after_start}, before_end: {before_end}')
if after_start and before_end:
return banner
return None
def fill_history(wb: Workbook, banners: list[dict], wish_history: list[dict]):
# fill headers
for sheet_name in wb.sheetnames[:-2]:
sheet = wb[sheet_name]
sheet.append(['Type', 'Name', 'Time', '', 'Pity', '#Roll', 'Group', 'Banner', 'Part'])
pity_counters = {}
roll_count = {}
for wish in wish_history:
banner = find_banner(banners, wish)
if banner is None and wish['gacha_type'] in ['301', '302', '400']:
print(f'Could not find banner for wish: {wish}')
continue
else:
if wish['gacha_type'] == "100":
banner = {"name": "Beginners' Wish", "type": "100"}
elif wish['gacha_type'] == "200":
banner = {"name": "Wanderlust Invocation", "type": "200"}
sheet_name = 'Beginners\' Wish'
if wish['gacha_type'] == '100':
sheet_name = 'Beginners\' Wish'
elif wish['gacha_type'] == '200':
sheet_name = 'Standard'
elif wish['gacha_type'] == '301':
sheet_name = 'Character Event'
elif wish['gacha_type'] == '302':
sheet_name = 'Weapon Event'
elif wish['gacha_type'] == '400':
sheet_name = 'Character Event'
sheet = wb[sheet_name]
entry = []
# Type
entry.append(wish['item_type'])
# Name
entry.append(wish['name'])
# Time
entry.append(wish['time'])
# ⭐
entry.append(wish['rank_type'])
# Pity
pity_type = "301" if wish['gacha_type'] == '400' else wish['gacha_type']
if not pity_counters.get(pity_type):
pity_counters[pity_type] = {"4": 0, "5": 0}
pity = 1
if wish['rank_type'] in ['5', '4']:
pity = pity_counters[pity_type][wish['rank_type']]
entry.append(str(pity))
if wish['rank_type'] in ['5', '4']:
pity_counters[pity_type][wish['rank_type']] = 0
else:
pity_counters[pity_type]['5'] += 1
pity_counters[pity_type]['4'] += 1
print(f'{pity_type} | {wish["gacha_type"]}')
# #Roll
roll_count[banner['name']] = roll_count.get(banner['name'], 0) + 1
entry.append(roll_count[banner['name']])
# Group
entry.append(roll_count[banner['name']]) # IDK what this is
# Banner
entry.append(banner['name'])
# Part
entry.append("")
sheet.append(entry)
return
def generate_history():
with open('banner_history.json', 'r') as f:
banners = json.load(f)
with open('genshin_wish_history.json', 'r') as f:
genshin_wish_history = json.load(f)
wb = openpyxl.Workbook()
wb.create_sheet('Character Event')
wb.create_sheet('Weapon Event')
wb.create_sheet('Standard')
wb.create_sheet('Beginners\' Wish')
wb.create_sheet('Banner List')
wb.create_sheet('Information')
fill_history(wb, banners, reversed(genshin_wish_history['history']))
wb.save('generated_history.xlsx')
return
def main():
generate_history()
if __name__ == '__main__':
main()

BIN
paimonmoe_wish_history.xlsx Normal file

Binary file not shown.