From 67a3502a8addeb96960d34bdeb5771f8a9729bfb Mon Sep 17 00:00:00 2001 From: Dung Truong Date: Tue, 19 Jan 2021 22:02:53 -0800 Subject: [PATCH] regenerate report of broken and not yet updated links --- code/CheckLinks.py | 35 ++++-- link_report.txt | 278 ++++++++------------------------------------- 2 files changed, 72 insertions(+), 241 deletions(-) diff --git a/code/CheckLinks.py b/code/CheckLinks.py index 3f640bb9..8d909918 100644 --- a/code/CheckLinks.py +++ b/code/CheckLinks.py @@ -3,23 +3,30 @@ import urllib.request as urllib import re from os import listdir -from os.path import isfile, join +from os.path import isfile, isdir, join input_path = "/Users/dtyoung/Documents/EEGLAB/sccn.github.io/_site" -host = "https://sccn.github.io" +host = "https://eeglab.org" def getHTMLFiles(path, prefix=""): - return [prefix + file for file in listdir(path) if re.search(".*\.html$",file)] + files = [join(prefix, file) for file in listdir(path) if re.search(".*\.html$",file)] + for folder in [f for f in listdir(path) if isdir(join(path, f))]: + files.extend(getHTMLFiles(join(path, folder), join(prefix, folder))) + return files files = getHTMLFiles(input_path) files.extend(getHTMLFiles(input_path + "/workshops", "workshops/")) -files.extend(getHTMLFiles(input_path + "/tutorials", "tutorials/")) +files = getHTMLFiles(input_path + "/tutorials", "tutorials/") +files.extend(getHTMLFiles(input_path + "/download", "download/")) +files.extend(getHTMLFiles(input_path + "/news", "news/")) +files.extend(getHTMLFiles(input_path + "/others", "others/")) +files.extend(getHTMLFiles(input_path + "/support", "support/")) files = list(set(files)) files.sort() print(files) with open('link_report.txt', "w") as w: - w.write("BROKEN LINKS\n") + w.write("BROKEN or NOT UPDATED LINKS\n") for file in files: # print(join(input_path, file)) # with open(join(input_path, file), "r") as f: @@ -32,9 +39,15 @@ def getHTMLFiles(path, prefix=""): soup = BeautifulSoup(page.content, 'html.parser') urls = soup.find_all('a') for link in urls: - href = link['href'] - if href.startswith('/'): - # print(host+href) - response = requests.get(host + href) - if response.status_code == 404: - w.write("\t-" + link.string + ": " + href + "\n") + try: + href = link['href'] + if href.startswith('/'): + # print(host+href) + response = requests.get(host + href) + if href.startswith("http://sccn.ucsd.edu/wiki") or response.status_code == 404: + w.write("\t-" + link.string + ": " + href + "\n") + elif href.startswith("http://sccn.ucsd.edu/wiki"): + w.write("\t-" + link.string + ": " + href + "\n") + except Exception: + print(link) + diff --git a/link_report.txt b/link_report.txt index d2a9da52..9fa89e5f 100644 --- a/link_report.txt +++ b/link_report.txt @@ -1,235 +1,53 @@ -BROKEN LINKS -404.html -Broken page: images.html +BROKEN or NOT UPDATED LINKS index.html - -right|400px: /Image:Eeglab_small.jpg - -EEGLAB hardware and software recommendations: /EEGLAB_hardware_and_software_recommendations -Download EEGLAB from GIT: /How_to_download_EEGLAB - -Download a compiled version of EEGLAB: /A13:_Compiled_EEGLAB - -EEGLAB extensions/plugins: /EEGLAB_Extensions - -EEGLAB revision history: /EEGLAB_revision_history - -Bugs and Suggestions: /EEGLAB_Bugs - -EEGLAB News and Discussion email lists: /EEGLAB_mailing_lists - -EEGLAB reference articles - Please cite: /EEGLAB_References - -Using EEGLAB vs. Commercial EEG Software: /EEGLAB_vs._Commercial_EEG_Software - -Working with EEGLAB and Fieldtrip: /EEGLAB_and_Fieldtrip - -Running EEGLAB on open source Octave: /Running_EEGLAB_on_Octave - -EEGLAB on MATLAB versus Python: /EEGLAB_and_python - -NEW Running EEGLAB on high performance computing resources - The Open EEGLAB Portal: /EEGLAB_and_high_performance_computing - -NEW Reading 3D electrode locations from an inexpensive 3D photo scan - get_chanlocs: /Get_chanlocs - -Using EEGLAB to process MEG data: /EEGLAB_and_MEG_data - -List of functions called by the EEGLAB menu: /MenuFunctions - -EEGLAB History: The first decade of 2001-2011: /The_first_decade_of_EEGLAB - -EEGLAB and MEX functions to recompile: /Mex_EEGLAB - -EEGLAB filtering FAQ: /Firfilt_FAQ - -(requires subscription here): /EEGLAB_mailing_lists - -Other TIPS and FAQ: /TIPS_and_FAQ - -EEGLAB extensions and plugins: /EEGLAB_Extensions_and_plugins - -ERICA - Experimental Real-time Interactive Control and Analysis framework: /ERICA - -Channel Location Files download: /Channel_Location_Files - -Binary version of the runica() infomax ICA decomposition function: /binica - -Download EEGLAB test scripts: /EEGLAB_test_cases - -300px|thumb|right|upright=3|Mugs from the 17th EEGLAB workshop: /File:EEGLAB-mug-shot.png - -The Online EEGLAB Workshop: /Online_EEGLAB_Workshop - -Future EEGLAB workshops: /Future_workshops - -Thirty-first EEGLAB Workshop: /EEGLAB_2020_Lublin - -Twenty-ninth EEGLAB Workshop: /EEGLAB_2019_Aspet - -Twenty-eighth EEGLAB Workshop: /EEGLAB_2018_at_UCSD - -Twenty-seventh EEGLAB Workshop: /EEGLAB_2018_Pittsburgh - -Twenty-sixth EEGLAB Workshop: /EEGLAB_2017_Israel - -Twenty-fifth EEGLAB Workshop: /EEGLAB_2017_Japan - -Twenty-fourth EEGLAB Workshop: /EEGLAB_2017_Aspet - -Twenty-third EEGLAB Workshop: /EEGLAB_2017_Mysore - -Twenty-second EEGLAB Workshop: /EEGLAB_2016_at_UCSD - -Twenty-first EEGLAB Workshop: /EEGLAB_2016_Santa_Margherita_Ligure - -Twentieth EEGLAB Workshop: /EEGLAB_2015_Sheffield - -Nineteenth EEGLAB Workshop: /EEGLAB_2015_Aspet - -Eighteenth EEGLAB Workshop: /EEGLAB_2014_Rio - -Seventeenth EEGLAB Workshop: /EEGLAB_2013_UCSD - -Sixteenth EEGLAB Workshop: /EEGLAB_2013_Aspet - -Fifteenth EEGLAB Workshop: /EEGLAB_2012_Beijing - -Fourteenth EEGLAB Workshop: /EEGLAB_2011_Mallorca - -Thirteenth EEGLAB Workshop: /EEGLAB_2011_Aspet - -Twelfth EEGLAB Workshop: /Twelfth_EEGLAB_Workshop - -Eleventh EEGLAB Workshop: /Eleventh_EEGLAB_Workshop_Taiwan - -Tenth EEGLAB Workshop: /Tenth_EEGLAB_Workshop - -Ninth EEGLAB Workshop: /EEGLAB09AUS - -Eighth EEGLAB Workshop: /EEGLAB09ASPET - -Seventh EEGLAB Workshop: /EEGLAB09EPIC - -Online EEGLAB Workshop: /Online_EEGLAB_Workshop - -Quick ICA Component Rejection Tutorial: /Quick_Rejection_Tutorial - -Getting Started: /Getting_Started - -I. Single Subject Data Processing: /I.Single_subject_data_processing_tutorial - -Chapter 01: Loading Data in EEGLAB: /I.1:_Loading_Data_in_EEGLAB - -Chapter 02: Channel Locations: /Chapter_02:_Channel_Locations - -Chapter 03: Plotting Channel Spectra and Maps: /Chapter_03:_Plotting_Channel_Spectra_and_Maps - -Chapter 04: Preprocessing Tools: /Chapter_04:_Preprocessing_Tools - -Chapter 05: Extracting Data Epochs: /Chapter_05:_Extracting_Data_Epochs - -Chapter 06: Data Averaging: /Chapter_06:_Data_Averaging - -Chapter 07: Selecting Data Epochs and Comparing: /Chapter_07:_Selecting_Data_Epochs_and_Comparing - -Chapter 08: Plotting ERP images: /Chapter_08:_Plotting_ERP_images - -Chapter 09: Decomposing Data Using ICA: /Chapter_09:_Decomposing_Data_Using_ICA - -Chapter 10: Working with ICA components: /Chapter_10:_Working_with_ICA_components - -Chapter 11: Time/Frequency decomposition: /Chapter_11:_Time/Frequency_decomposition - -Chapter 12: Multiple Datasets: /Chapter_12:_Multiple_Datasets - -II. Multiple Subject Processing: /II.Multiple_subject_processing_tutorial - -Chapter 01: Multiple Subject Proccessing Overview: /Chapter_01:_Multiple_Subject_Proccessing_Overview - -Chapter 02: STUDY Creation: /Chapter_02:_STUDY_Creation - -Chapter 03: Working with STUDY designs: /Chapter_03:_Working_with_STUDY_designs - -Chapter 04: STUDY Data Visualization Tools: /Chapter_04:_STUDY_Data_Visualization_Tools - -Chapter 05: Component Clustering Tools: /Chapter_05:_Component_Clustering_Tools - -Chapter 06: Study Statistics and Visualization Options: /Chapter_06:_Study_Statistics_and_Visualization_Options - -Chapter 07: EEGLAB Study Data Structures: /Chapter_07:_EEGLAB_Study_Data_Structures - -Chapter 08: Command line STUDY functions: /Chapter_08:_Command_line_STUDY_functions - -III. Advanced Topics: /III.Advanced_Topics - -Chapter 01: Rejecting Artifacts: /Chapter_01:_Rejecting_Artifacts - -Chapter 02: Writing EEGLAB Scripts: /Chapter_02:_Writing_EEGLAB_Scripts - -Chapter 03: Event Processing: /Chapter_03:_Event_Processing - -IV. Appendix: /IV.Appendix - -A01: Importing Continuous and Epoched Data: /A01:_Importing_Continuous_and_Epoched_Data - -A02: Importing Event Epoch Info: /A02:_Importing_Event_Epoch_Info - -A03: Importing Channel Locations: /A03:_Importing_Channel_Locations - -A04: Exporting Data: /A04:_Exporting_Data - -A05: Data Structures: /A05:_Data_Structures - -A06: EEGLAB option menu: /A06:_EEGLAB_option_menu - -A07: Contributing to EEGLAB: /A07:_Contributing_to_EEGLAB - -A08: DIPFIT: /A08:_DIPFIT - -A09: Using custom MRI from individual subjects: /A09:_Using_custom_MRI_from_individual_subjects - -A10: MI-clust: /A10:_MI-clust - -A11: BESA (outdated): /A11:_BESA_\(outdated\) - -A12: Quick Tutorial on Rejection: /A12:_Quick_Tutorial_on_Rejection - -A13: Compiled EEGLAB: /A13:_Compiled_EEGLAB -tutorials/II.Multiple_subject_processing_tutorial.html - -Chapter 01: Multiple Subject Proccessing Overview: /Chapter_01:_Multiple_Subject_Proccessing_Overview - -Chapter 02: STUDY Creation: /Chapter_02:_STUDY_Creation - -Chapter 03: Working with STUDY designs: /Chapter_03:_Working_with_STUDY_designs - -Chapter 04: STUDY Data Visualization Tools: /Chapter_04:_STUDY_Data_Visualization_Tools - -Chapter 05: Component Clustering Tools: /Chapter_05:_Component_Clustering_Tools - -Chapter 06: Study Statistics and Visualization Options: /Chapter_06:_Study_Statistics_and_Visualization_Options - -Chapter 07: EEGLAB Study Data Structures: /Chapter_07:_EEGLAB_Study_Data_Structures - -Chapter 08: Command line STUDY functions: /Chapter_08:_Command_line_STUDY_functions - -Category:EEGLAB: /Category:EEGLAB -tutorials/III.Advanced_Topics.html - -Chapter 01: Rejecting Artifacts: /Chapter_01:_Rejecting_Artifacts - -Chapter 02: Writing EEGLAB Scripts: /Chapter_02:_Writing_EEGLAB_Scripts - -Chapter 03: Event Processing: /Chapter_03:_Event_Processing - -Category:EEGLAB: /Category:EEGLAB -tutorials/IV.Appendix.html - -A01: Importing Continuous and Epoched Data: /A01:_Importing_Continuous_and_Epoched_Data - -A02: Importing Event Epoch Info: /A02:_Importing_Event_Epoch_Info - -A03: Importing Channel Locations: /A03:_Importing_Channel_Locations - -A04: Exporting Data: /A04:_Exporting_Data - -A05: Data Structures: /A05:_Data_Structures - -A06: EEGLAB option menu: /A06:_EEGLAB_option_menu - -A07: Contributing to EEGLAB: /A07:_Contributing_to_EEGLAB - -A08: DIPFIT: /A08:_DIPFIT - -A09: Using custom MRI from individual subjects: /A09:_Using_custom_MRI_from_individual_subjects - -A10: MI-clust: /A10:_MI-clust - -A11: BESA (outdated): /A11:_BESA_(outdated) - -A12: Quick Tutorial on Rejection: /A12:_Quick_Tutorial_on_Rejection - -A13: Compiled EEGLAB: /A13:_Compiled_EEGLAB - -Category:EEGLAB: /Category:EEGLAB -tutorials/index.html - -300px|thumb|right|upright=3|Mugs from the 17th EEGLAB workshop: /File:EEGLAB-mug-shot.png - -The Online EEGLAB Workshop: /Online_EEGLAB_Workshop - -Future EEGLAB workshops: /Future_workshops - -Thirty-first EEGLAB Workshop: /EEGLAB_2020_Lublin - -Twenty-ninth EEGLAB Workshop: /EEGLAB_2019_Aspet - -Twenty-eighth EEGLAB Workshop: /EEGLAB_2018_at_UCSD - -Twenty-seventh EEGLAB Workshop: /EEGLAB_2018_Pittsburgh - -Twenty-sixth EEGLAB Workshop: /EEGLAB_2017_Israel - -Twenty-fifth EEGLAB Workshop: /EEGLAB_2017_Japan - -Twenty-fourth EEGLAB Workshop: /EEGLAB_2017_Aspet - -Twenty-third EEGLAB Workshop: /EEGLAB_2017_Mysore - -Twenty-second EEGLAB Workshop: /EEGLAB_2016_at_UCSD - -Twenty-first EEGLAB Workshop: /EEGLAB_2016_Santa_Margherita_Ligure - -Twentieth EEGLAB Workshop: /EEGLAB_2015_Sheffield - -Nineteenth EEGLAB Workshop: /EEGLAB_2015_Aspet - -Eighteenth EEGLAB Workshop: /EEGLAB_2014_Rio - -Seventeenth EEGLAB Workshop: /EEGLAB_2013_UCSD - -Sixteenth EEGLAB Workshop: /EEGLAB_2013_Aspet - -Fifteenth EEGLAB Workshop: /EEGLAB_2012_Beijing - -Fourteenth EEGLAB Workshop: /EEGLAB_2011_Mallorca - -Thirteenth EEGLAB Workshop: /EEGLAB_2011_Aspet - -Twelfth EEGLAB Workshop: /Twelfth_EEGLAB_Workshop - -Eleventh EEGLAB Workshop: /Eleventh_EEGLAB_Workshop_Taiwan - -Tenth EEGLAB Workshop: /Tenth_EEGLAB_Workshop - -Ninth EEGLAB Workshop: /EEGLAB09AUS - -Eighth EEGLAB Workshop: /EEGLAB09ASPET - -Seventh EEGLAB Workshop: /EEGLAB09EPIC -tutorials/single-subject.html - -Chapter 01: Loading Data in EEGLAB: /Chapter_01:_Loading_Data_in_EEGLAB - -Chapter 02: Channel Locations: /Chapter_02:_Channel_Locations - -Chapter 03: Plotting Channel Spectra and Maps: /Chapter_03:_Plotting_Channel_Spectra_and_Maps - -Chapter 04: Preprocessing Tools: /Chapter_04:_Preprocessing_Tools - -Chapter 05: Extracting Data Epochs: /Chapter_05:_Extracting_Data_Epochs - -Chapter 06: Data Averaging: /Chapter_06:_Data_Averaging - -Chapter 07: Selecting Data Epochs and Comparing: /Chapter_07:_Selecting_Data_Epochs_and_Comparing - -Chapter 08: Plotting ERP images: /Chapter_08:_Plotting_ERP_images - -Chapter 09: Decomposing Data Using ICA: /Chapter_09:_Decomposing_Data_Using_ICA - -Chapter 10: Working with ICA components: /Chapter_10:_Working_with_ICA_components - -Chapter 11: Time/Frequency decomposition: /Chapter_11:_Time/Frequency_decomposition - -Chapter 12: Multiple Datasets: /Chapter_12:_Multiple_Datasets - -Category:EEGLAB: /Category:EEGLAB - - - - -workshops/EEGLAB_2009_Aspet.html - -EEGLAB wiki: /EEGLAB - -workshops/EEGLAB_2011_Aspet.html - -EEGLAB wiki: /EEGLAB + -Download EEGLAB test cases: /EEGLAB_test_cases + -Other TIPS and FAQ: /FAQ/TIPS_and_FAQ + -EEGLAB filtering FAQ: /FAQ/Firfilt_FAQ +others/EEGLAB_Extensions.html + -How to contribute to EEGLAB: /tutorials/misc/Contributing_to_EEGLAB.html + -PACT: http://sccn.ucsd.edu/wiki/PACT +others/Firfilt_FAQ.html + -Q3: http://sccn.ucsd.edu/wiki/Firfilt_FAQ#Q._What_is_the_difference_between_the_.E2.80.9CBasic_FIR_filter_.28new.29.E2.80.9D_and_the_.E2.80.9CWindowed_sinc_FIR_filter.E2.80.9D.3F +others/How_to_download_EEGLAB.html + -page: /others/Fork_the_EEGLAB_repository.html + -page: /tutorials/misc/Contributing_to_EEGLAB.html +others/Running_EEGLAB_on_Octave.html + -this page: /others/Fork_the_EEGLAB_repository.html + -This other page: /tutorials/misc/Contributing_to_EEGLAB.html +tutorials/04_Import/Importing_Continuous_and_Epoched_Data.html + -quickstart guide: /Tutorials/quickstart.html + -quickstart guide: /Tutorials/quickstart.html +tutorials/05_Preprocess/rereferencing.html + -Appendix: /tutorials/IV.Appendix/rereferencing_background.html +tutorials/06_RejectArtifacts/RunICA.html + -Appendix: /tutorials/IV.Appendix/ICA_background.html + -Appendix: /tutorials/IV.Appendix/ICA_background.html#note-on-ica-algorithms + -this Appendix section: /tutorials/IV.Appendix/ICA_background.html#how-many-data-points-do-i-need-to-run-an-ica +tutorials/06_RejectArtifacts/cleanrawdata.html + -this section of the tutorial: /Tutorials/Rejecting_Artifacts_Legacy_Menus.html +tutorials/10_Group_analysis/working_with_study_designs.html + -STUDY design structure: /tutorials/multi-subject/EEGLAB-STUDY-data-structure.html + -STUDY structure: /tutorials/multi-subject/EEGLAB-STUDY-data-structure.html +tutorials/ConceptsGuide/Data_Structures.html + -component clustering: /tutorial/10_Group_analysis/component_clustering_tools.html +tutorials/contribute/Contributing_to_EEGLAB.html + -pull requests: /others/Fork_the_EEGLAB_repository.html + -plugin: /tutorials/misc/Contributing_to_EEGLAB.html +tutorials/contribute/design_plugin.html + -example section: /contribute/design_plugin.html#eegplugin_-function-examples +tutorials/misc/Rejecting_Artifacts_Legacy_Menus.html + -section: /tutorials/RejectArtifacts/ +workshops/EEGLAB_2010_SanDiego.html + -Browse the EEGLAB wikitutorial: http://sccn.ucsd.edu/wiki/eeglab + -Browse the ERICA DataSuite wiki tutorial: http://sccn.ucsd.edu/wiki/DataSuite + -Browse the ERICA MatRiver wiki tutorial: http://sccn.ucsd.edu/wiki/MatRiver + -Browse the ERICA Enactor wiki tutorial: http://sccn.ucsd.edu/wiki/Enactor + -Browse the SCCN MoBI lab wiki tutorial: http://sccn.ucsd.edu/wiki/MoBI_Lab workshops/EEGLAB_2012_Beijing.html - -EEGLAB wiki: /EEGLAB -workshops/EEGLAB_2013_Aspet.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2013_UCSD.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2014_Rio.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2015_Aspet.html -workshops/EEGLAB_2015_Sheffield.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2016_SML.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2017_Aspet.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2017_Israel.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2017_Japan.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2017_Mysore.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2018_Pittsburgh.html - -EEGLAB tutorial wiki: /EEGLAB -workshops/EEGLAB_2018_at_UCSD.html - -CSP: /media:CSP.png -workshops/EEGLAB_2019_Aspet.html - -EEGLAB tutorial wiki: /EEGLAB + -this note on the importance of knowing skull conductivity: http://sccn.ucsd.edu/wiki/NFT_Appendix_C + -nf): /media:nft_presentation12.pdf workshops/EEGLAB_2020_Lublin.html - -EEGLAB tutorial wiki: /EEGLAB - -Missing material ------------------- + -here: /workshops/reading_material workshops/Online_EEGLAB_Workshop.html - -native support for eLoreta: /A08:_DIPFIT#DIPFIT_eLoreta -workshops/index.html - -Eleventh EEGLAB Workshop: /workshops/Eleventh_EEGLAB_Workshop_Taiwan - -To add once we have the location of tutorials: ------------------------------------------------ - -workshops/EEGLAB_2011_Mallorca.html - -EEGLAB wiki: /EEGLAB - -Linear_Representations_and_Basis_Vectors: /Linear_Representations_and_Basis_Vectors - -Random_Variables_and_Probability_Density_Functions: /Random_Variables_and_Probability_Density_Functions - -Amica: /Amica - -Amica_Download: /Amica_Download - - -workshops/EEGLAB_2009_Bloomington.html - -Group Research Questions (15 Mb): /Media:ProjectQuestions.doc - -workshops/EEGLAB_2009_Aspet.html - -these instructions: /EEGLAB/I.Analyzing_Data_in_EEGLAB#Installing_EEGLAB_and_tutorial_files + -Ten lecture course on contemporary BCI design: http://sccn.ucsd.edu/wiki/Introduction_To_Modern_Brain-Computer_Interface_Design