diff --git a/feedWatcher b/feedWatcher index 4cb5f77..b110101 100755 --- a/feedWatcher +++ b/feedWatcher @@ -48,8 +48,8 @@ use feature qw{ postderef say signatures state }; no warnings qw{ experimental::postderef experimental::signatures } ; # -# There's an issue in XML::RSS, so we're using a loocal version with a hack. -# It's in ./lib/ and FiindBin::libs looks there to find it. +# There's an issue in XML::RSS, so we're using a local version with a hack. +# It's in ./lib/ and FindBin::libs looks there to find it. # use FindBin::libs; use XML::RSS; @@ -77,6 +77,7 @@ use Template::Filters; Template::Filters->use_html_entities; # Use HTML::Entities in the template use HTML::Entities; +use HTML::Parser (); use IO::Prompter; @@ -102,14 +103,17 @@ our $VERSION = '0.1.2'; # # Declarations # -my ( @new_urls, @deletions ); -my ( $rules, $robot_name ) = ( undef, "$PROG/$VERSION" ); -my ($search_target); -my ( $sth1, $h1, $rv ); -my ($rejectcount); +my ( $action_mode, @urls, @deletions ); +my ( $rules, $robot_name ) = ( undef, "$PROG/$VERSION" ); +my ( $sth1, $h1, $rv, $search_target, $rejectcount ); my $feeds; +# +# To be written by a handler subroutine called by HTML::Parser +# +our $html_title; + # # File and directory paths # @@ -127,6 +131,7 @@ my $deftemplate = "$basedir/${PROG}.tpl"; my %keymap = ( AUTHOR => 'author', COPYRIGHT => 'copyright', + CHECKTYPE => 'check_type', DESCRIPTION => 'description', DNS => 'dns', # ENCLOSURES => undef, @@ -142,6 +147,7 @@ my %keymap = ( LINK => 'link', MODIFIED => 'modified', # PORT => undef, + REASON_ACCEPTED => 'reason_accepted', # ROBOTS => undef, # SAVE => undef, TITLE => 'title', @@ -178,7 +184,7 @@ Options( \%options ); # # Any arguments are taken to be URLs # -@new_urls = @ARGV; +@urls = @ARGV; # # Default help @@ -199,11 +205,14 @@ my $DEBUG = ( $options{'debug'} ? $options{'debug'} : 0 ); my $cfgfile = ( defined( $options{config} ) ? $options{config} : $configfile ); -my $silent = ( defined( $options{silent} ) ? $options{silent} : 0 ); +my $dry_run = ( defined( $options{'dry-run'} ) ? $options{'dry-run'} : 0 ); +my $silent = ( defined( $options{silent} ) ? $options{silent} : 0 ); + my $loadfile = $options{'load'}; my $deletefile = $options{'delete'}; my $scan = ( defined( $options{scan} ) ? $options{scan} : 0 ); +my $html = ( defined( $options{html} ) ? $options{html} : 0 ); my $check = $options{check}; my $outfile = $options{out}; @@ -213,50 +222,83 @@ my $json = $options{json}; my $opml = $options{opml}; my $template = $options{template}; + +#------------------------------------------------------------------------------- +# Validate and process options +#------------------------------------------------------------------------------- +# +# Sanity +# +die "Choose either -load or -delete, not both\n" + if (defined($loadfile) && defined($deletefile)); + # # Check the configuration file # die "Unable to find configuration file $cfgfile\n" unless ( -e $cfgfile ); # -# Check the load file +# Process the load option and the delete option, checking any files mentioned, +# and determining the primary action we're aiming for. # -if ($loadfile) { - die "File $loadfile does not exist\n" unless -e $loadfile; - die "File $loadfile is not readable\n" unless -r $loadfile; +if (optionalFile('load', $loadfile)) { + $action_mode = 'load'; + _debug( + $DEBUG > 0, + "Action mode: $action_mode", + ( $loadfile eq '' + ? "Load from arguments" + : "File to load: $loadfile" + ) + ); } - -# -# Check the delete file -# -if ($deletefile) { - die "File $deletefile does not exist\n" unless -e $deletefile; - die "File $deletefile is not readable\n" unless -r $deletefile; -} - -# -# The checking mode defaults to 'auto' if the option has no value, or may be -# 'manual' or 'none'. If the option is not used at all it defaults to 'none'. -# -if ( defined($check) ) { - $check =~ s/(^\s+|\s+$)//g; - if ($check =~ /^$/) { - $check = "auto"; - } - else { - $check = lc($check); - die "Invalid option '-check=$check'\n" . - "Values are , auto and manual\n" - unless ($check =~ /^(auto|manual|none)$/) - } +elsif (optionalFile('delete', $deletefile)) { + $action_mode = 'delete'; + _debug( + $DEBUG > 0, + "Action mode: $action_mode", + ( $deletefile eq '' + ? "Delete from arguments" + : "File to delete from $deletefile" + ) + ); } else { - $check = 'none'; + $action_mode = 'none'; } +# +# The copyright checking mode defaults to 'auto' if the option has no value, +# or may be 'manual' or 'none'. If the option is not used at all it defaults +# to 'none'. It's only relevant to the 'load' action though. +# +if ( $action_mode eq 'load' ) { + if ( $action_mode eq 'load' && defined($check) ) { + $check =~ s/(^\s+|\s+$)//g; + if ($check =~ /^$/) { + $check = "auto"; + } + else { + $check = lc($check); + die "Invalid option '-check=$check'\n" . + "Values are , auto and manual\n" + unless ($check =~ /^(auto|manual|none)$/) + } + } + else { + $check = 'none'; + } + emit($silent,"Copyright check mode = $check\n"); +} + +emit($silent,"Dry run mode = " . ($dry_run ? "On" : "Off") . "\n"); +emit($silent,"----\n"); + +# TODO: Does it make sense to have -load and -report, etc at the same time? # # We accept -report, meaning report everything or -report='title' to report -# just the feed with the given title. +# just the feed with the given title (actually, the title which contains the +# given string). # if ( defined($report) ) { if ($report =~ /^$/) { @@ -266,6 +308,7 @@ if ( defined($report) ) { $search_target = $report; } } + # # We accept -json or -json=filename. In the former case we make a default # name, otherwise we use the one provided. @@ -298,9 +341,9 @@ if ( defined($template) ) { die "Error: Unable to find template $template\n" unless -r $template; } -# +#------------------------------------------------------------------------------- # Load configuration data -# +#------------------------------------------------------------------------------- my $conf = new Config::General( -ConfigFile => $cfgfile, -InterPolateVars => 1, @@ -308,9 +351,9 @@ my $conf = new Config::General( ); my %config = $conf->getall(); -# +#------------------------------------------------------------------------------- # Connect to the database -# +#------------------------------------------------------------------------------- my $dbtype = $config{database}->{type}; my $dbfile = $config{database}->{file}; my $dbuser = $config{database}->{user}; @@ -331,17 +374,18 @@ $dbh->do('PRAGMA foreign_keys = ON'); # my $rows = countRows( $dbh, 'SELECT count(*) FROM urls' ); my $work = ( - scalar(@new_urls) > 0 - || defined($loadfile) - || defined($deletefile) - || ( defined($report) - || defined($json) - || defined($opml) - || defined($template) - || $scan && $rows > 0 ) + ( scalar(@urls) > 0 && $action_mode =~ /load|delete/ ) + || ( defined($report) + || defined($json) + || defined($opml) + || defined($template) + || $scan && $rows > 0 ) ); -die "Nothing to do!\n" unless $work; +unless ($work) { + print STDERR "Nothing to do!\n"; + exit; +} #------------------------------------------------------------------------------- # Set up logging keeping the default log layout except for the date @@ -391,102 +435,120 @@ if ($rejectfile) { $rules = WWW::RobotRules->new($robot_name); #------------------------------------------------------------------------------- -# Slurp the load file into @new_urls if the file is provided +# Check the mode we are in and prepare to load or delete according to the +# answer. #------------------------------------------------------------------------------- -if ($loadfile) { +if ($action_mode eq 'load') { # - # Load the input file + # Slurp the load file into @urls if the file is provided # - open( my $in, '<:encoding(utf8)', $loadfile ) - or die "$PROG : failed to open load file '$loadfile' : $!\n"; - chomp( my @loaded = <$in> ); - close($in) - or warn "$PROG : failed to close load file '$loadfile' : $!\n"; + if ($loadfile) { + # + # Load the input file + # + open( my $in, '<:encoding(utf8)', $loadfile ) + or die "$PROG : failed to open load file '$loadfile' : $!\n"; + chomp( my @loaded = <$in> ); + close($in) + or warn "$PROG : failed to close load file '$loadfile' : $!\n"; - $LOG->info("Loaded URLs from $loadfile"); - - # - # Add the loaded URLs to the array - # - push( @new_urls, @loaded ); -} - -# -# Now, we either have URLs from the command line, or from the load file (or -# both), so we process these. -# -# It's a loop because 'loadUrls' might find some more URLs by scanning HTML -# URLs if given them. If it does we replace @new_urls with the found URLs and -# go again. When there's nothing returned the loop stops. -# ---- -# NOTE: This seems dirty, but all the 'while' is testing is whether the array -# contains anything or not. It's not iterating over it or anything, which would -# be messy! -# -while (@new_urls) { - # - # Remove duplicates, finish if it deletes them all! - # - @new_urls = uniq(@new_urls); - last unless @new_urls; - - # - # Remove any commented out lines, finish if it deletes them all! - # - @new_urls = grep {!/^\s*#/} @new_urls; - last unless @new_urls; - - $LOG->info( "Received ", scalar(@new_urls), - " URLs to add to the database" ); - - # - # Load these URLs as appropriate, returning any more that we find by - # following HTML urls. We overwrite the original list and start all over - # again. - # - @new_urls = loadUrls( $dbh, \@new_urls, $rules, \%keymap ); -} - -# -# Process the delete file if there is one -# -if ($deletefile) { - # - # Load the delete file - # - open( my $del, '<:encoding(utf8)', $deletefile ) - or die "$PROG : failed to open load file '$deletefile' : $!\n"; - chomp( @deletions = <$del> ); - close($del) - or warn "$PROG : failed to close load file '$deletefile' : $!\n"; - - # - # Remove duplicates - # - @deletions = uniq(@deletions); - - $LOG->info( "Deleting ", scalar(@deletions), " URLs from the database" ); - - # - # There are URLs to delete. Process them on by one. - # - if (@deletions) { - $sth1 = $dbh->prepare(q{DELETE from urls WHERE url = ?}); - foreach my $rec (@deletions) { - $rv = $sth1->execute($rec); - if ( $dbh->err ) { - warn $dbh->errstr; - } - if ( $rv != 0 ) { - emit ( $silent, "Deleted $rec ($rv rows)\n" ); - } - else { - emit ( $silent, "Failed to delete $rec\n" ); - } - } + $LOG->info("Loaded URLs from $loadfile"); + # + # Add the loaded URLs to the array + # + push( @urls, @loaded ); } + # + # Now, we either have URLs from the command line, or from the load file (or + # both), so we process these. + # + # It's a loop because 'loadUrls' might find some more URLs by scanning HTML + # URLs if given them. If it does we replace @urls with the found URLs and + # go again. When there's nothing returned the loop stops. + # ---- + # NOTE: This seems dirty, but all the 'while' is testing is whether the array + # contains anything or not. It's not iterating over it or anything, which would + # be messy! + # + while (@urls) { + # + # Remove duplicates, finish if it deletes them all! + # + @urls = uniq(@urls); + last unless @urls; + + # + # Remove any commented out lines, finish if it deletes them all! + # + @urls = grep {!/^\s*#/} @urls; + last unless @urls; + + $LOG->info( "Loading ", scalar(@urls), " URLs to the database" ); + + # + # Load these URLs as appropriate, returning any more that we find by + # following HTML urls. We overwrite the original list and start all over + # again. + # + @urls = loadUrls( $dbh, \@urls, $rules, \%keymap, $dry_run ); + } +} +elsif ($action_mode eq 'delete') { + # + # Process the delete file if there is one + # + if ($deletefile) { + # + # Load the delete file + # + open( my $del, '<:encoding(utf8)', $deletefile ) + or die "$PROG : failed to open load file '$deletefile' : $!\n"; + chomp( @deletions = <$del> ); + close($del) + or warn "$PROG : failed to close delete file '$deletefile' : $!\n"; + + # + # Add the loaded URLs to the array + # + push( @urls, @deletions ); + + # + # Remove duplicates + # + @urls = uniq(@urls); + } + + if (@urls) { + # + # TODO: check that these URLs are actually in the database! Seems + # silly to report "Failed to delete" when it's not there anyway! + # + # There are URLs to delete. Process them one by one. + # + if ($dry_run) { + emit( $silent, + "Would have deleted " . scalar(@urls) . " URLs\n" ) + } + else { + $sth1 = $dbh->prepare(q{DELETE from urls WHERE url = ?}); + foreach my $rec (@urls) { + $rv = $sth1->execute($rec); + if ( $dbh->err ) { + warn $dbh->errstr; + } + if ( $rv != 0 ) { + emit ( $silent, "Deleted $rec ($rv rows)\n" ); + $LOG->info( "Deleted URL '$rec' from the database" ); + } + else { + emit ( $silent, "Failed to delete $rec\n" ); + $LOG->warning( "Failed to delete '$rec' from the database" ); + } + } + } + } } #------------------------------------------------------------------------------- @@ -494,9 +556,9 @@ if ($deletefile) { # TODO: Needs to be developed; does nothing at the moment. #------------------------------------------------------------------------------- if ($scan) { - $LOG->info( "Scan is not fully implemented yet" ); + $LOG->warning( "Scan is not fully implemented yet" ); # Testing. Processes the first two feeds - scanDB($dbh, \%keymap); + scanDB($dbh, \%keymap, $dry_run); } #------------------------------------------------------------------------------- @@ -625,7 +687,7 @@ if ($opml) { #------------------------------------------------------------------------------- -# Fill and print the template if requested +# Fill and print the TT² template if requested #------------------------------------------------------------------------------- if ($template) { my $tt = Template->new( @@ -664,12 +726,14 @@ exit; #=== FUNCTION ================================================================ # NAME: loadUrls -# PURPOSE: To load URLs read from the input file into the database +# PURPOSE: To load URLs read from the input file (and the arguments) into +# the database # PARAMETERS: $dbh database handle # $new_urls arrayref containing URLs # $rules WWW::RobotRules object # $keymap hashref containing a map of key names to # database field names +# $dry_run Boolean, set if in dry-run mode # RETURNS: Any new URLs discovered by investigating non-feed URLs. # DESCRIPTION: # THROWS: No exceptions @@ -677,7 +741,7 @@ exit; # SEE ALSO: N/A #=============================================================================== sub loadUrls { - my ( $dbh, $new_urls, $rules, $keymap ) = @_; + my ( $dbh, $new_urls, $rules, $keymap, $dry_run ) = @_; my ( $stream, $feed ); my ( %uridata, $roboturl, @found_urls ); @@ -751,7 +815,7 @@ sub loadUrls { emit( $silent, "Search for robots.txt file failed\n" ); } else { - emit( $silent, "Check of robots.txt rules failed\n" ); + emit( $silent, "Check of robots.txt rules blocks access\n" ); $uridata{SAVE} = 0; next; } @@ -790,13 +854,14 @@ sub loadUrls { # weirdness of RSS and poor adherence to what standards there # are). # - print Dumper($feed), "\n" if ( $DEBUG > 2 ); + _debug( $DEBUG > 2, Dumper($feed)); storeFeed($feed,\%uridata); # # Perform a check on the copyright. The routine sets # $uridata{SAVE} = 0 if the copyright is not acceptable. # + $uridata{CHECKMODE} = $check; if ( $check ne 'none' ) { unless (checkCopyright( $check, \%uridata )) { # @@ -848,7 +913,7 @@ sub loadUrls { # Decide whether to save what we have collected # if ( $uridata{SAVE} ) { - if ( addURI( $dbh, \%uridata, $keymap ) ) { + if ( addURI( $dbh, \%uridata, $keymap, $dry_run ) ) { emit( $silent, "$uridata{URI} added to the database\n" ); $LOG->info("$uridata{TYPE} ",$uridata{URI},' added to the database'); @@ -864,7 +929,7 @@ sub loadUrls { if ( defined( $uridata{ENCLOSURE_COUNT} ) && $uridata{ENCLOSURE_COUNT} > 0 ) { - if ( addEnclosures( $dbh, \%uridata ) ) { + if ( addEnclosures( $dbh, \%uridata, $dry_run ) ) { emit( $silent, $uridata{ENCLOSURE_COUNT}, " enclosures for $uridata{URI} added to the database\n" ); @@ -882,7 +947,7 @@ sub loadUrls { # # Dump what we have if requested # - print Dumper( \%uridata ), "\n" if ( $DEBUG > 1 ); + _debug( $DEBUG > 1, Dumper( \%uridata ) ); emit( $silent, '-' x 80, "\n" ); } @@ -969,6 +1034,7 @@ sub searchTitle { # PARAMETERS: $dbh database handle # $keymap hashref containing a map of key names to # database field names +# $dry_run Boolean, set if in dry-run mode # RETURNS: Nothing # DESCRIPTION: # THROWS: No exceptions @@ -976,8 +1042,9 @@ sub searchTitle { # SEE ALSO: N/A #=============================================================================== sub scanDB { - my ($dbh, $keymap) = @_; + my ($dbh, $keymap, $dry_run) = @_; + # TODO: dry-run mode not implemented here yet my ( $sql1, $sth1, $rv1, $h1 ); my ( $aref, @urls, $DT, $stream, $feed ); my ( %uridata, $urichanges, $enc_changes ); @@ -1156,7 +1223,7 @@ sub scanDB { # $url feed URL to look up # $uridata hashref to the hash of data collected from the # feed -# RETURNS: True (1) if all the steps worked, otherwise false (0) +# RETURNS: True (1) if all the steps worked, otherwise false (0) # DESCRIPTION: # THROWS: No exceptions # COMMENTS: None @@ -1259,7 +1326,7 @@ sub scanFeed { # # Save the important feed components in the %uridata hash # - print Dumper($feed), "\n" if ( $DEBUG > 2 ); + _debug( $DEBUG > 2, Dumper( $feed ) ); storeFeed( $feed, $uridata ); } else { @@ -1372,7 +1439,7 @@ sub findFeed { sub reportFeed { my ($feed, $fh) = @_; - my $lwidth = 12; + my $lwidth = 15; # # Hash for converting database keys to labels for the report and arrays @@ -1380,42 +1447,44 @@ sub reportFeed { # state ( %keys, @seq1, @seq2 ); %keys = ( - 'id' => 'DB Primary key', - 'latest_ep' => 'Latest episode date', - 'ep_author' => 'Author', - 'ep_byte_length' => 'Byte length', - 'ep_category' => 'Category', - 'ep_enclosure' => 'URL', - 'ep_ep_id' => 'ID', - 'ep_id' => 'Key', - 'ep_issued' => 'Issued on', - 'ep_last_update' => 'Last updated', - 'ep_link' => 'Permalink', - 'ep_mime_type' => 'MIME type', - 'ep_modified' => 'Modified on', - 'ep_source' => 'Source', - 'ep_title' => 'Title', - 'ep_urls_id' => 'URL key', - 'urls_author' => 'Author', - 'urls_content_type' => 'Content type', - 'urls_copyright' => 'Copyright', - 'urls_description' => 'Description', - 'urls_dns' => 'DNS', - 'urls_feedformat' => 'Feed format', - 'urls_generator' => 'Generator', - 'urls_host_up' => 'Host up', - 'urls_http_status' => 'HTTP status', - 'urls_id' => 'Key', - 'urls_image' => 'Image', - 'urls_language' => 'Language', - 'urls_last_update' => 'Last updated', - 'urls_link' => 'Link', - 'urls_modified' => 'Modified on', - 'urls_title' => 'Title', - 'urls_url' => 'Feed URL', - 'urls_urltype' => 'URL type', - 'urls_parent_id' => 'Parent ID', - 'urls_child_count' => 'Child count', + 'id' => 'DB Primary key', + 'latest_ep' => 'Latest episode date', + 'ep_author' => 'Author', + 'ep_byte_length' => 'Byte length', + 'ep_category' => 'Category', + 'ep_enclosure' => 'URL', + 'ep_ep_id' => 'ID', + 'ep_id' => 'Key', + 'ep_issued' => 'Issued on', + 'ep_last_update' => 'Last updated', + 'ep_link' => 'Permalink', + 'ep_mime_type' => 'MIME type', + 'ep_modified' => 'Modified on', + 'ep_source' => 'Source', + 'ep_title' => 'Title', + 'ep_urls_id' => 'URL key', + 'urls_author' => 'Author', + 'urls_check_type' => 'Check type', + 'urls_content_type' => 'Content type', + 'urls_copyright' => 'Copyright', + 'urls_description' => 'Description', + 'urls_dns' => 'DNS', + 'urls_feedformat' => 'Feed format', + 'urls_generator' => 'Generator', + 'urls_host_up' => 'Host up', + 'urls_http_status' => 'HTTP status', + 'urls_id' => 'Key', + 'urls_image' => 'Image', + 'urls_language' => 'Language', + 'urls_last_update' => 'Last updated', + 'urls_link' => 'Link', + 'urls_modified' => 'Modified on', + 'urls_reason_accepted' => 'Reason accepted', + 'urls_title' => 'Title', + 'urls_url' => 'Feed URL', + 'urls_urltype' => 'URL type', + 'urls_parent_id' => 'Parent ID', + 'urls_child_count' => 'Child count', ); @seq1 = ( @@ -1426,6 +1495,8 @@ sub reportFeed { 'urls_author', 'urls_content_type', 'urls_copyright', + 'urls_check_type', + 'urls_reason_accepted', 'urls_description', 'urls_dns', 'urls_generator', @@ -1577,6 +1648,7 @@ sub dbSearch { # PURPOSE: To perform a non-SELECT query # PARAMETERS: $dbh database handle # $sql SQL expression to use +# $dry_run Boolean, set if in dry-run mode # @args arguments for the 'execute' # RETURNS: True (1) if the query succeeded, otherwise false (0). # DESCRIPTION: Uses 'prepare_cached' to allow repeated calls with the same @@ -1587,10 +1659,15 @@ sub dbSearch { # SEE ALSO: N/A #=============================================================================== sub execSQL { - my ( $dbh, $sql, @args ) = @_; + my ( $dbh, $sql, $dry_run, @args ) = @_; my ( $sth1, $rv ); + if ($dry_run) { + emit($silent,"Dry-run: Would have run SQL '$sql'\n"); + return; + } + $sth1 = $dbh->prepare_cached($sql); try { $rv = $sth1->execute(@args); @@ -1792,12 +1869,16 @@ sub checkContentType { my ( $uri, $uridata, $headers, $children, $log ) = @_; my @feeds; + my $content; $uridata->{HTTP_STATUS} = 'Unknown'; my $browser = LWP::UserAgent->new or return 0; + $browser->timeout(10); + $browser->agent("$PROG/$VERSION"); - my $response = $browser->head( $uri->as_string, %{$headers} ) + #my $response = $browser->head( $uri->as_string, %{$headers} ) + my $response = $browser->get( $uri->as_string, %{$headers} ) or return 0; $uridata->{HTTP_STATUS} = $response->status_line; @@ -1830,15 +1911,25 @@ sub checkContentType { } else { # - # This HTML and we found 'child' feeds of some kind + # This is HTML and we found 'child' feeds of some kind # emit( $silent, "Found ", scalar(@feeds), " feeds within this HTML page\n" ); - print Dumper( \@feeds ), "\n" if $DEBUG > 0; + _debug( $DEBUG > 0, Dumper( \@feeds ) ); push(@{$children}, @feeds); } } + # + # TODO: Get the title for an HTML page by parsing the source + # + if ( $uridata->{TYPE} eq 'HTML' ) { + unless ($uridata->{TITLE}) { + $content = $response->decoded_content; + $uridata->{TITLE} = getHTMLTitle($uri->as_string, $content); + } + } + $log->info( "URL content classified as: ", $uridata->{TYPE} ); emit( $silent, "URL content classified as: ", $uridata->{TYPE}, "\n" ); return 1; @@ -1849,6 +1940,41 @@ sub checkContentType { } } +#=== FUNCTION ================================================================ +# NAME: getURL +# PURPOSE: Download the contents of an URL +# PARAMETERS: $url URL of the page to download +# RETURNS: String representation of the contents or undef if the +# download failed. +# DESCRIPTION: Issues a GET on the URL. If successful the contents are +# decoded and returned, otherwise undef is returned. +# THROWS: No exceptions +# COMMENTS: None +# SEE ALSO: +#=============================================================================== +sub getURL { + my ($url) = @_; + + # + # Use LWP::UserAgent to get the feed and handle errors + # + my $ua = LWP::UserAgent->new; + $ua->timeout(10); + $ua->agent("$PROG/$VERSION"); + my $response = $ua->get($url); + + my $content; + if ( $response->is_success ) { + $content = $response->decoded_content; + return $content; + } + else { + warn "Failed to get $url\n"; + warn $response->status_line, "\n"; + return; # undef + } +} + #=== FUNCTION ================================================================ # NAME: getFeed # PURPOSE: Download the contents of a feed URL @@ -1885,6 +2011,98 @@ sub getFeed { } } +#=== FUNCTION ================================================================ +# NAME: start_handler +# PURPOSE: HTTP::Parser handler for events +# PARAMETERS: <first> the name of the tag found +# <second> the object being processed +# RETURNS: Nothing (ignored anyway) +# DESCRIPTION: +# THROWS: No exceptions +# COMMENTS: None +# SEE ALSO: N/A +#=============================================================================== +#sub start_handler { +# +# # +# # Ignore any tags which are not 'title' +# # +# return if shift ne "title"; +# +# # +# # Define more handlers if we have a title. One to collect the title string +# # and the other to abort the parse on encountering the end of the title. +# # +# my $self = shift; +# $self->handler(text => sub { $main::html_title = shift }, "dtext"); +# $self->handler( +# end => sub { +# shift->eof if shift eq "title"; +# }, +# "tagname,self" +# ); +#} + +#=== FUNCTION ================================================================ +# NAME: getHTMLTitle +# PURPOSE: Parse an HTML page to get data. At the moment this is just the +# title in the header section. +# PARAMETERS: $url URL of the page; only used for messages and as +# a fallback title. +# $content Decoded content of the HTML page +# RETURNS: The title, if there is one, otherwise the URL +# DESCRIPTION: +# THROWS: No exceptions +# COMMENTS: None +# SEE ALSO: N/A +#=============================================================================== +sub getHTMLTitle { + my ($url, $content) = @_; + + # + # Is this effectively a local subroutine? + # + my $start_handler = sub { + # + # Ignore any tags which are not 'title' + # + return if shift ne "title"; + + # + # Define more handlers if we have a title. One to collect the title string + # and the other to abort the parse on encountering the end of the title. + # + my $self = shift; + $self->handler(text => sub { $main::html_title = shift }, "dtext"); + $self->handler( + end => sub { + shift->eof if shift eq "title"; + }, + "tagname,self" + ); + }; + + # + # Create the HTML::Parser object + # + my $p = HTML::Parser->new(api_version => 3); + + # + # Define a 'start' handler. When called with 'title' as the 'tagname' it + # creates a 'text' event handler to print the text and an 'end' handler to + # quit when the closing '</title' tag is found. + # + #$p->handler(start => \&start_handler, "tagname,self"); + $p->handler(start => $start_handler, "tagname,self"); + + # + # Invoke the parser on the string containing the returned HTML. + # + $p->parse($content); + + return $main::html_title // $url; +} + #=== FUNCTION ================================================================ # NAME: parseFeed # PURPOSE: Parse a podcast feed that has already been downloaded @@ -2014,7 +2232,7 @@ sub storeFeed { sub checkCopyright { my ($checkmode, $uridata) = @_; - my ( $copyright, $re, $decision ); + my ( $copyright, $re, $decision, $reason ); $LOG->info("Checking copyright of feed (mode: $checkmode)"); if ( $checkmode eq 'manual' ) { @@ -2040,14 +2258,36 @@ sub checkCopyright { warn "Problem processing copyright decision: $_"; $decision = 0; }; + + if ($decision) { + # + # If accepted we want a reason for this manual check + # + try { + $reason = prompt( + -in => *STDIN, + -out => *STDERR, + -prompt => 'Please give a reason for this decision:', + -style => 'bold red underlined', + -default => 'No reason given' + ); + } + catch { + warn "Problem processing reason for copyright decision: $_"; + $reason = 'Error while processing the reason'; + }; + + $uridata->{REASON_ACCEPTED} = $reason; + } } else { # - # Careful. Un-escaped spaces are ignored + # Automatic mode. + # Careful. Un-escaped spaces are ignored in the regex # $re = qr{( - CC| - Creative\ Commons| + \bCC\b| + \bCreative\ Commons\b| creativecommons.org| Attribution.NonCommercial.No.?Derivatives? )}xmi; @@ -2106,9 +2346,10 @@ sub parseRSS { # $uridata hashref containing data for the current URI # $keymap hashref containing a map of key names to # database field names +# $dry_run Boolean, set if in dry-run mode # RETURNS: True (1) if the insert succeeded, false (0) otherwise # DESCRIPTION: The hash keys are defined as an array to make it easy to slice -# the hash and the SQL is defined internally using the size of +# the hash, and the SQL is defined internally using the size of # the key array as a guide to the number of '?' placeholders. # These are passed to execSQL to do the work. # THROWS: No exceptions @@ -2116,7 +2357,7 @@ sub parseRSS { # SEE ALSO: N/A #=============================================================================== sub addURI { - my ( $dbh, $uridata, $keymap ) = @_; + my ( $dbh, $uridata, $keymap, $dry_run ) = @_; my @keys = ( 'URI', 'DNS', @@ -2126,6 +2367,7 @@ sub addURI { 'DESCRIPTION', 'AUTHOR', 'MODIFIED', 'LINK', 'IMAGE', 'COPYRIGHT', + 'CHECKTYPE', 'REASON_ACCEPTED', 'GENERATOR', 'LANGUAGE', ); @@ -2135,9 +2377,9 @@ sub addURI { . 'VALUES(' . join( ',', ('?') x scalar(@keys) ) . ')'; - print "addURI query: $sql\n" if $DEBUG > 0; + _debug( $DEBUG > 0, "addURI query: $sql"); - return execSQL( $dbh, $sql, @{$uridata}{@keys} ); + return execSQL( $dbh, $sql, $dry_run, @{$uridata}{@keys} ); } @@ -2206,6 +2448,7 @@ sub extractEnclosures { # $uridata hashref containing data for the current URI # including an arrayref of hashrefs of episode # data +# $dry_run Boolean, set if in dry-run mode # RETURNS: True (1) if all the inserts succeeded, false (0) otherwise # DESCRIPTION: The SQL is defined internally and the hash keys are defined as # an array to make it easy to slice the hash. The enclosures (or @@ -2219,7 +2462,7 @@ sub extractEnclosures { # SEE ALSO: N/A #=============================================================================== sub addEnclosures { - my ( $dbh, $uridata ) = @_; + my ( $dbh, $uridata, $dry_run ) = @_; my $sql = q{INSERT INTO episodes (urls_id, link, enclosure, title, author, category, source, ep_id, @@ -2233,7 +2476,7 @@ sub addEnclosures { my $successes = 0; foreach my $enc ( @{ $uridata->{ENCLOSURES} } ) { - if ( execSQL( $dbh, $sql, $uridata->{URI_ID}, @{$enc}{@keys} ) ) { + if ( execSQL( $dbh, $sql, $dry_run, $uridata->{URI_ID}, @{$enc}{@keys} ) ) { $successes++; } else { @@ -2253,6 +2496,7 @@ sub addEnclosures { # data # $keymap hashref containing a map of key names to # database field names +# $dry_run Boolean, set if in dry-run mode # RETURNS: The number of changes made # DESCRIPTION: # THROWS: No exceptions @@ -2260,8 +2504,9 @@ sub addEnclosures { # SEE ALSO: N/A #=============================================================================== sub updateURI { - my ( $dbh, $uridata, $keymap ) = @_; + my ( $dbh, $uridata, $keymap, $dry_run ) = @_; + # TODO: dry-run mode not implemented here yet my ( $sql1, $sth1, $rv1, $h1 ); my ( %fieldvals, %where ); my ( $diffs, $updates ) = ( 0, 0 ); @@ -2353,6 +2598,7 @@ sub updateURI { sub updateEnclosures { my ( $dbh, $uridata ) = @_; + # TODO: This doesn't acttually update annything! my ( $sql1, $sth1, $rv1, $h1 ); my ( %fieldvals, %where ); my ( $diffs, $updates ) = ( 0, 0 ); @@ -2372,6 +2618,40 @@ sub updateEnclosures { $h1 = $sth1->fetchrow_hashref; } +#=== FUNCTION ================================================================ +# NAME: optionalFile +# PURPOSE: Process an option of the form '-opt:s' where 's' is an +# optional filename. +# PARAMETERS: $optionName Name of option +# $optionValue Value of option (assumed to be blank of +# a filename) +# RETURNS: A boolean: 1 (true) if there is a filename, 0 (false) if the +# name has been omitted. +# DESCRIPTION: The $optionValue will be blank or a filename. If the latter +# then the existence of the file and its readbility are checked +# and the script dies if either test fails. +# THROWS: No exceptions +# COMMENTS: None +# SEE ALSO: N/A +#=============================================================================== +sub optionalFile { + my ( $optionName, $optionValue ) = @_; + + if (defined($optionValue)) { + if ( $optionValue =~ /^$/ ) { + return 1; + } + else { + die "File in '-$optionName=$optionValue' does not exist\n" + unless -e $optionValue; + die "File in '-$optionName=$optionValue' is not readable\n" + unless -r $optionValue; + return 1; + } + } + return 0; +} + #=== FUNCTION ================================================================ # NAME: equal # PURPOSE: Compare two strings even if undefined @@ -2504,6 +2784,32 @@ sub emit { } } +#=== FUNCTION ================================================================ +# NAME: _debug +# PURPOSE: Prints debug reports +# PARAMETERS: $active Boolean: 1 for print, 0 for no print +# $messages... Arbitrary list of messages to print +# RETURNS: Nothing +# DESCRIPTION: Outputs messages if $active is true. It removes any trailing +# newline from each one and then adds one in the 'print' to the +# caller doesn't have to bother. Prepends each message with 'D>' +# to show it's a debug message. +# THROWS: No exceptions +# COMMENTS: Differs from other functions of the same name +# SEE ALSO: N/A +#=============================================================================== +sub _debug { + my $active = shift; + + my $message; + return unless $active; + + while ($message = shift) { + chomp($message); + print STDERR "D> $message\n"; + } +} + #=== FUNCTION ================================================================ # NAME: Options # PURPOSE: Processes command-line options @@ -2518,10 +2824,11 @@ sub Options { my ($optref) = @_; my @options = ( - "help", "manpage", "debug=i", "silent!", - "load=s", "delete=s", "scan!", "report:s", - "check:s", "json:s", "opml:s", "config=s", - "out=s", "rejects:s", "template:s", + "help", "manpage", "debug=i", "dry-run!", + "silent!", "load:s", "delete:s", "scan!", + "report:s", "html!", "check:s", "json:s", + "opml:s", "config=s", "out=s", "rejects:s", + "template:s", ); if ( !GetOptions( $optref, @options ) ) { diff --git a/feedWatcher.db b/feedWatcher.db index d5ffef2..9736f85 100644 Binary files a/feedWatcher.db and b/feedWatcher.db differ diff --git a/feedWatcher.html b/feedWatcher.html index e266532..3f950e3 100644 --- a/feedWatcher.html +++ b/feedWatcher.html @@ -198,6 +198,14 @@ <dl> + <dt><a href="https://2.5admins.com">2.5 Admins</a> (<a href="https://2.5admins.com/feed/podcast">feed</a>)</dt> + + + <dd>2.5 Admins is a podcast featuring two sysadmins called Allan Jude and Jim Salter, and a producer/editor who can just about configure a Samba share called Joe Ressington. Every two weeks we get together, talk about recent tech news, and answer some of your admin-related questions.</dd> + + + + <dt><a href="https://www.adminadminpodcast.co.uk">Admin Admin Podcast</a> (<a href="http://feeds.feedburner.com/TheAdminAdminPodcast">feed</a>)</dt> @@ -558,6 +566,14 @@ + <dt><a href="https://www.linuxuserspace.show">Linux User Space</a> (<a href="https://www.linuxuserspace.show/rss">feed</a>)</dt> + + + <dd>How did your favorite Linux distribution get its start? Join us and find out! Linux User Space is hosted by Leo and Dan, and every two weeks we deep dive into the history of Linux distributions and the things that matter to us. Episodes drop every other Monday.</dd> + + + + <dt><a href="https://www.linuxatwork.org">Linux at Work</a> (<a href="http://feeds.podtrac.com/mBdfP0QTX0iY">feed</a>)</dt> @@ -702,6 +718,14 @@ + <dt><a href="http://www.scienceforthepeople.ca/">Science for the People</a> (<a href="http://feeds.feedburner.com/SkepticallySpeaking">feed</a>)</dt> + + + <dd>Science for the People is a long-format interview podcast that explores the connections between science, popular culture, history, and public policy, to help listeners understand the evidence and arguments behind what's in the news and on the shelves. Our hosts sit down with science researchers, writers, authors, journalists, and experts to discuss science from the past, the science that affects our lives today, and how science might change our future.</dd> + + + + <dt><a href="https://twit.tv/shows/security-now">Security Now (Audio)</a> (<a href="http://feeds.twit.tv/sn.xml">feed</a>)</dt> diff --git a/feedWatcher.json b/feedWatcher.json index afe275a..fcdf205 100644 --- a/feedWatcher.json +++ b/feedWatcher.json @@ -1,4 +1,44 @@ [ + { + "ep_author" : null, + "ep_byte_length" : 27631616, + "ep_category" : "podcast", + "ep_enclosure" : "https://podtrac.com/pts/redirect.mp3/traffic.libsyn.com/latenightlinux/2.5admins-125.mp3", + "ep_ep_id" : "https://2.5admins.com/?p=727", + "ep_id" : 6519, + "ep_issued" : "2023-01-12 16:56:36", + "ep_last_update" : "2023-01-12 20:47:31", + "ep_link" : "https://2.5admins.com/2-5-admins-125/", + "ep_mime_type" : "audio/mpeg", + "ep_modified" : null, + "ep_source" : null, + "ep_title" : "2.5 Admins 125: Into Thin Eir", + "ep_urls_id" : 99, + "id" : 99, + "latest_ep" : "2023-01-12 16:56:36", + "urls_author" : null, + "urls_check_type" : "auto", + "urls_child_count" : 0, + "urls_content_type" : "text/xml; charset=UTF-8", + "urls_copyright" : null, + "urls_description" : "2.5 Admins is a podcast featuring two sysadmins called Allan Jude and Jim Salter, and a producer/editor who can just about configure a Samba share called Joe Ressington. Every two weeks we get together, talk about recent tech news, and answer some of your admin-related questions.", + "urls_dns" : "45.56.127.9", + "urls_feedformat" : "RSS 2.0", + "urls_generator" : "https://wordpress.org/?v=6.1.1", + "urls_host_up" : 1, + "urls_http_status" : "200 OK", + "urls_id" : 99, + "urls_image" : "https://2.5admins.com/wp-content/uploads/powerpress/2.5-admins-1600.png", + "urls_language" : "en-US", + "urls_last_update" : "2023-01-14 20:48:07", + "urls_link" : "https://2.5admins.com", + "urls_modified" : null, + "urls_parent_id" : null, + "urls_reason_accepted" : "", + "urls_title" : "2.5 Admins", + "urls_url" : "https://2.5admins.com/feed/podcast", + "urls_urltype" : "Feed" + }, { "ep_author" : "mail@adminadminpodcast.co.uk (mralcadmin)", "ep_byte_length" : 35992797, @@ -17,6 +57,7 @@ "id" : 1, "latest_ep" : "2022-12-21 10:09:27", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -29,10 +70,11 @@ "urls_id" : 1, "urls_image" : "http://www.adminadminpodcast.co.uk/wp-content/uploads/powerpress/adminadminlogosmall.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:43:54", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://www.adminadminpodcast.co.uk", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Admin Admin Podcast", "urls_url" : "http://feeds.feedburner.com/TheAdminAdminPodcast", "urls_urltype" : "Feed" @@ -55,6 +97,7 @@ "id" : 30, "latest_ep" : "2023-01-03 21:15:41", "urls_author" : "distro@twit.tv (TWiT Engineering)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -67,10 +110,11 @@ "urls_id" : 30, "urls_image" : "https://elroy.twit.tv/sites/default/files/styles/twit_album_art_2048x2048/public/images/shows/all_about_android/album_art/audio/aaa2022_albumart_standard_2400.jpg?itok=kz3rVkEc", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:21:43", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://twit.tv/shows/all-about-android", "urls_modified" : "2023-01-03 22:15:02", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "All About Android (Audio)", "urls_url" : "http://feeds.twit.tv/aaa.xml", "urls_urltype" : "Feed" @@ -93,6 +137,7 @@ "id" : 2, "latest_ep" : "2016-10-23 19:24:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -105,10 +150,11 @@ "urls_id" : 2, "urls_image" : "http://aiit.se/radio/img/aiitr_icon_144x144.png", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 15:43:56", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://aiit.se/radio/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "All In IT Radio (ogg)", "urls_url" : "http://feeds.aiit.se/allinit-radio-ogg", "urls_urltype" : "Feed" @@ -131,6 +177,7 @@ "id" : 31, "latest_ep" : "2022-12-31 05:00:00", "urls_author" : "tommy@amateurlogic.tv (Tommy Martin)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : "Creative Commons", @@ -143,10 +190,11 @@ "urls_id" : 31, "urls_image" : "http://amateurlogic.tv/images/altv-cover-art.jpg", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:28:24", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.amateurlogic.tv", "urls_modified" : "2006-04-10 17:18:29", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "AmateurLogic.TV", "urls_url" : "http://amateurlogic.tv/transmitter/feeds/ipod.xml", "urls_urltype" : "Feed" @@ -169,6 +217,7 @@ "id" : 32, "latest_ep" : "2023-01-03 20:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml; charset=utf-8", "urls_copyright" : "© 2023 CC-BY-ND", @@ -181,10 +230,11 @@ "urls_id" : 32, "urls_image" : null, "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:29:35", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://podcast.asknoahshow.com", "urls_modified" : "2023-01-04 21:08:23", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Ask Noah Show", "urls_url" : "https://feeds.fireside.fm/asknoah/rss", "urls_urltype" : "Feed" @@ -207,6 +257,7 @@ "id" : 33, "latest_ep" : "2022-10-12 02:00:00", "urls_author" : "show@cchits.net (CCHits.net Show Admin)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "The content created by this site is generated by a script which is licensed under the Affero General Public License version 3 (AGPL3). The generated content is released under a Creative Commons By-Attribution License.", @@ -219,10 +270,11 @@ "urls_id" : 33, "urls_image" : "https://cchits.net/images/cchits_coverart.png", "urls_language" : "en-gb", - "urls_last_update" : "2023-01-09 16:30:11", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://cchits.net/daily", "urls_modified" : "2023-01-09 00:00:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "CCHits.net", "urls_url" : "https://cchits.net/daily/rss", "urls_urltype" : "Feed" @@ -245,6 +297,7 @@ "id" : 4, "latest_ep" : "2022-11-08 09:12:40", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -257,10 +310,11 @@ "urls_id" : 4, "urls_image" : "https://ccjam.otherside.network/wp-content/uploads/sites/4/powerpress/cover2-980.png", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-09 15:44:15", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://ccjam.otherside.network/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "CCJam", "urls_url" : "https://ccjam.otherside.network/feed/podcast/", "urls_urltype" : "Feed" @@ -283,6 +337,7 @@ "id" : 5, "latest_ep" : "2023-01-09 03:10:36", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml; charset=UTF-8", "urls_copyright" : null, @@ -295,10 +350,11 @@ "urls_id" : 5, "urls_image" : "https://destinationlinux.org/wp-content/uploads/2021/06/dln-podcast-art-destination-linux-scaled.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:44:27", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://destinationlinux.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Destination Linux", "urls_url" : "http://destinationlinux.org/feed/mp3/", "urls_urltype" : "Feed" @@ -321,6 +377,7 @@ "id" : 6, "latest_ep" : "2022-08-27 17:33:58", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml; charset=UTF-8", "urls_copyright" : null, @@ -333,10 +390,11 @@ "urls_id" : 6, "urls_image" : "https://edictzero.files.wordpress.com/2022/01/cropped-ezwebsitez_icon_2.jpg?w=32", "urls_language" : "en", - "urls_last_update" : "2023-01-09 15:44:44", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://edictzero.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Edict Zero", "urls_url" : "https://edictzero.wordpress.com/feed/", "urls_urltype" : "Feed" @@ -359,6 +417,7 @@ "id" : 34, "latest_ep" : "2022-12-28 08:02:55", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "CC BY-SA 4.0 Wikipediapodden", @@ -371,10 +430,11 @@ "urls_id" : 34, "urls_image" : "http://wikipediapodden.se/wp-content/uploads/2019/05/FB-profile-150x150.png", "urls_language" : "sv-SE", - "urls_last_update" : "2023-01-09 16:30:51", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://wikipediapodden.se", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "English – Wikipediapodden", "urls_url" : "http://wikipediapodden.se/tag/english/feed/", "urls_urltype" : "Feed" @@ -397,6 +457,7 @@ "id" : 7, "latest_ep" : "2023-01-05 22:00:04", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml;charset=UTF-8", "urls_copyright" : null, @@ -409,10 +470,11 @@ "urls_id" : 7, "urls_image" : "https://escapepod.org/wp-content/uploads/2018/03/cropped-Escape-Pod-chip-2-32x32.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:44:51", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://escapepod.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Escape Pod", "urls_url" : "http://escapepod.org/feed/", "urls_urltype" : "Feed" @@ -435,6 +497,7 @@ "id" : 96, "latest_ep" : "2022-09-09 00:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "CC BY SA 4.0", @@ -447,10 +510,11 @@ "urls_id" : 96, "urls_image" : "https://ExpeditionSasquatch.org/img/logo.jpg", "urls_language" : "en", - "urls_last_update" : "2023-01-10 19:21:26", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://ExpeditionSasquatch.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Expedition Sasquatch", "urls_url" : "https://expeditionsasquatch.org/episodes.mp3.rss", "urls_urltype" : "Feed" @@ -473,6 +537,7 @@ "id" : 35, "latest_ep" : "2023-01-04 14:00:00", "urls_author" : "distro@twit.tv (TWiT Engineering)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -485,10 +550,11 @@ "urls_id" : 35, "urls_image" : "https://elroy.twit.tv/sites/default/files/styles/twit_album_art_2048x2048/public/images/shows/floss_weekly/album_art/audio/floss2022_albumart_standard_2400.jpg?itok=yojWupNV", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:31:20", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://twit.tv/shows/floss-weekly", "urls_modified" : "2023-01-04 17:18:23", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "FLOSS Weekly (Audio)", "urls_url" : "http://leoville.tv/podcasts/floss.xml", "urls_urltype" : "Feed" @@ -511,6 +577,7 @@ "id" : 36, "latest_ep" : "2023-01-04 14:00:00", "urls_author" : "distro@twit.tv (TWiT Engineering)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -523,10 +590,11 @@ "urls_id" : 36, "urls_image" : "https://elroy.twit.tv/sites/default/files/styles/twit_album_art_2048x2048/public/images/shows/floss_weekly/album_art/audio/floss2022_albumart_standard_2400.jpg?itok=yojWupNV", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:32:01", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://twit.tv/shows/floss-weekly", "urls_modified" : "2023-01-04 17:18:23", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "FLOSS Weekly (Audio)", "urls_url" : "http://feeds.twit.tv/floss.xml", "urls_urltype" : "Feed" @@ -549,6 +617,7 @@ "id" : 37, "latest_ep" : "2022-12-27 19:20:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "Licensed under CC BY-SA 4.0 International", @@ -561,10 +630,11 @@ "urls_id" : 37, "urls_image" : "https://fossandcrafts.org/static/images/F_and_C_logo_combined.jpg", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:32:34", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://fossandcrafts.org", "urls_modified" : "2022-12-27 19:17:19", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "FOSS and Crafts", "urls_url" : "https://fossandcrafts.org/rss-feed.rss", "urls_urltype" : "Feed" @@ -587,6 +657,7 @@ "id" : 88, "latest_ep" : null, "urls_author" : "web@lists.fsfe.org (FSFE Webmaster Team)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/x-rss+xml", "urls_copyright" : "Copyright (c) Free Software Foundation Europe. Verbatim copying and distribution\n of this entire article is permitted in any medium, provided this\n notice is preserved.", @@ -599,10 +670,11 @@ "urls_id" : 88, "urls_image" : "https://fsfe.org/events/fsfe-events.png", "urls_language" : "en", - "urls_last_update" : "2023-01-09 17:18:08", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://fsfe.org/events/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "FSFE Events", "urls_url" : "https://fsfe.org/events/events.en.rss", "urls_urltype" : "Feed" @@ -625,6 +697,7 @@ "id" : 87, "latest_ep" : "2023-01-09 00:00:00", "urls_author" : "web@lists.fsfe.org (FSFE Webmaster Team)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/x-rss+xml", "urls_copyright" : "Copyright (c) Free Software Foundation Europe. Verbatim copying and distribution\n of this entire article is permitted in any medium, provided this\n notice is preserved.", @@ -637,10 +710,11 @@ "urls_id" : 87, "urls_image" : "https://fsfe.org/news/fsfe-news.png", "urls_language" : "en", - "urls_last_update" : "2023-01-09 17:18:07", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://fsfe.org/news/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "FSFE News", "urls_url" : "https://fsfe.org/news/news.en.rss", "urls_urltype" : "Feed" @@ -663,6 +737,7 @@ "id" : 38, "latest_ep" : "2021-03-09 13:42:00", "urls_author" : "oggcast@faif.us (Bradley and Karen)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021, Free as in Freedom. Licensed under a Creative Commons Attribution-Share Alike 3.0 USA License.", @@ -675,10 +750,11 @@ "urls_id" : 38, "urls_image" : "http://faif.us/img/cast/faif_144x144.jpg", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:33:15", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://faif.us/cast/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Free as in Freedom", "urls_url" : "http://faif.us/feeds/cast-ogg/", "urls_urltype" : "Feed" @@ -701,6 +777,7 @@ "id" : 89, "latest_ep" : "2021-03-09 13:42:00", "urls_author" : "oggcast@faif.us (Bradley and Karen)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021, Free as in Freedom. Licensed under a Creative Commons Attribution-Share Alike 3.0 USA License.", @@ -713,10 +790,11 @@ "urls_id" : 89, "urls_image" : "http://faif.us/img/cast/faif_144x144.jpg", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 17:32:26", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://faif.us/cast/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Free as in Freedom", "urls_url" : "http://faif.us/feeds/cast-mp3/", "urls_urltype" : "Feed" @@ -739,6 +817,7 @@ "id" : 8, "latest_ep" : null, "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : null, @@ -751,10 +830,11 @@ "urls_id" : 8, "urls_image" : null, "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 15:45:13", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.hwhq.com/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "GAMERadio", "urls_url" : "http://hwhq.com/rss.xml", "urls_urltype" : "Feed" @@ -777,6 +857,7 @@ "id" : 9, "latest_ep" : "2023-01-09 13:21:54", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : null, @@ -789,10 +870,11 @@ "urls_id" : 9, "urls_image" : "http://gnuworldorder.info/images/site.png", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 15:45:18", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.gnuworldorder.info", "urls_modified" : "2021-01-01 01:20:18", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "GNU World Order Linux Cast", "urls_url" : "https://gnuworldorder.info/ogg.xml", "urls_urltype" : "Feed" @@ -815,6 +897,7 @@ "id" : 39, "latest_ep" : "2015-05-27 19:36:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "This work is licensed under Creative Commons Attribution 4.0", @@ -827,10 +910,11 @@ "urls_id" : 39, "urls_image" : null, "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:33:49", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://gnulinuxrtm.blogspot.com/", "urls_modified" : "2022-12-05 00:43:48", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "GNU/Linux RTM", "urls_url" : "http://feeds.feedburner.com/GNULinuxRTM", "urls_urltype" : "Feed" @@ -853,6 +937,7 @@ "id" : 40, "latest_ep" : "2022-06-01 15:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml; charset=utf-8", "urls_copyright" : "Creative Commons Attribution 3.0 United States License", @@ -865,10 +950,11 @@ "urls_id" : 40, "urls_image" : "https://geekspeak.org/images/GeekSpeak_Logo_400x400_09022012.png", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:34:44", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://geekspeak.org/", "urls_modified" : "2022-06-01 22:03:52", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Geek Speak with Lyle Troxell", "urls_url" : "https://geekspeak.org/episodes/rss.xml", "urls_urltype" : "Feed" @@ -891,6 +977,7 @@ "id" : 41, "latest_ep" : "2023-01-02 22:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative Commons", @@ -903,10 +990,11 @@ "urls_id" : 41, "urls_image" : null, "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:35:11", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://frontrowcrew.com/geeknights/monday/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "GeekNights Mondays: Science Technology Computing", "urls_url" : "http://feeds.feedburner.com/GNSciTech", "urls_urltype" : "Feed" @@ -929,6 +1017,7 @@ "id" : 42, "latest_ep" : "2022-12-21 00:00:01", "urls_author" : "goinglinux@gmail.com (Larry Bushey)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : "Creative Commons Attribution 4.0 International License.", @@ -941,10 +1030,11 @@ "urls_id" : 42, "urls_image" : "https://goinglinux.com/images/GoingLinux1400.jpg", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:41:36", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://goinglinux.com", "urls_modified" : "2022-12-21 00:00:02", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Going Linux", "urls_url" : "http://goinglinux.com/oggpodcast.xml", "urls_urltype" : "Feed" @@ -967,6 +1057,7 @@ "id" : 43, "latest_ep" : "2023-01-09 00:00:00", "urls_author" : "admin@hackerpublicradio.org (HPR Volunteer)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : "Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License", @@ -979,10 +1070,11 @@ "urls_id" : 43, "urls_image" : "http://hackerpublicradio.org/images/hpr_feed_small.png", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:42:06", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://hackerpublicradio.org/about.php", "urls_modified" : "2023-01-09 00:00:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Hacker Public Radio", "urls_url" : "http://hackerpublicradio.org/hpr_ogg_rss.php", "urls_urltype" : "Feed" @@ -1005,6 +1097,7 @@ "id" : 97, "latest_ep" : "2023-01-09 08:10:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -1017,10 +1110,11 @@ "urls_id" : 97, "urls_image" : "https://image.simplecastcdn.com/images/6d0021c7-4504-4cd8-a194-c8d6c2b4fd7a/14e8afb5-8608-4501-8d90-c3e5b4551078/3000x3000/podcast-square-season-4-temp.jpg?aid=rss_feed", "urls_language" : "en", - "urls_last_update" : "2023-01-11 09:41:10", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://www.eff.org/how-to-fix-the-internet-podcast", "urls_modified" : "2023-01-09 08:10:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "How to Fix the Internet", "urls_url" : "https://feeds.eff.org/howtofixtheinternet", "urls_urltype" : "Feed" @@ -1043,6 +1137,7 @@ "id" : 44, "latest_ep" : "2016-04-20 23:35:00", "urls_author" : "horst.jens@spielend-programmieren.at (Horst JENS)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : "Copyright 2015 CC-BY-SA", @@ -1055,10 +1150,11 @@ "urls_id" : 44, "urls_image" : "http://spielend-programmieren.at/intopenpodcast/international-open-podcast-logo2.png", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:42:17", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://internationalopenmagazine.org/category/podcast.html", "urls_modified" : "2016-05-10 09:35:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "International Open Podcast", "urls_url" : "http://spielend-programmieren.at/intopenpodcast.xml", "urls_urltype" : "Feed" @@ -1081,6 +1177,7 @@ "id" : 10, "latest_ep" : "2021-07-23 17:52:55", "urls_author" : "info@archive.org (Info Box)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -1093,10 +1190,11 @@ "urls_id" : 10, "urls_image" : "https://archive.org/images/glogo.png", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 15:45:45", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://archive.org/", "urls_modified" : "2023-01-09 15:40:53", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Internet Archive", "urls_url" : "http://feeds.feedburner.com/archive/Lqwl", "urls_urltype" : "Feed" @@ -1119,6 +1217,7 @@ "id" : 45, "latest_ep" : "2022-10-23 05:25:30", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative commons apply ! Non commercial re-use is allowed.", @@ -1131,10 +1230,11 @@ "urls_id" : 45, "urls_image" : "https://knightwise.com/wp-content/uploads/2021/05/podcast_avatar2-scaled.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:42:45", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://knightwise.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Knightwise.com Audio Feed.", "urls_url" : "http://feeds.feedburner.com/knightcastpodcast", "urls_urltype" : "Feed" @@ -1157,6 +1257,7 @@ "id" : 11, "latest_ep" : "2008-10-10 18:27:34", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -1169,10 +1270,11 @@ "urls_id" : 11, "urls_image" : null, "urls_language" : "en", - "urls_last_update" : "2023-01-09 15:45:49", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://radio.linuxquestions.org", "urls_modified" : "2008-10-10 18:27:34", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "LQ Radio", "urls_url" : "http://feeds.feedburner.com/linuxquestions/LQRadioALL-ogg", "urls_urltype" : "Feed" @@ -1195,6 +1297,7 @@ "id" : 46, "latest_ep" : "2009-04-20 23:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative Commons License Some Rights Reserved", @@ -1207,10 +1310,11 @@ "urls_id" : 46, "urls_image" : null, "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:43:11", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://thelinuxlink.net/lager", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "LaGER: GNU/Linux and Games/Entertainment Radio", "urls_url" : "http://feeds.feedburner.com/thelinuxlink/Paek", "urls_urltype" : "Feed" @@ -1233,6 +1337,7 @@ "id" : 12, "latest_ep" : "2023-01-03 02:20:21", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -1245,10 +1350,11 @@ "urls_id" : 12, "urls_image" : "http://latenightlinux.com/wp-content/uploads/latenightlinux.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:46:00", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://latenightlinux.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Late Night Linux (Ogg)", "urls_url" : "http://latenightlinux.com/feed/ogg", "urls_urltype" : "Feed" @@ -1271,6 +1377,7 @@ "id" : 47, "latest_ep" : "2020-05-28 14:50:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "Licensed under CC BY-SA 4.0 International", @@ -1283,10 +1390,11 @@ "urls_id" : 47, "urls_image" : "https://librelounge.org/static/images/ll-logo-square.png", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:43:48", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://librelounge.org", "urls_modified" : "2021-05-26 13:12:02", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Libre Lounge", "urls_url" : "https://librelounge.org/rss-feed.rss", "urls_urltype" : "Feed" @@ -1309,6 +1417,7 @@ "id" : 13, "latest_ep" : "2012-06-22 00:25:24", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml; charset=utf-8", "urls_copyright" : null, @@ -1321,10 +1430,11 @@ "urls_id" : 13, "urls_image" : null, "urls_language" : "en", - "urls_last_update" : "2023-01-09 15:46:11", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://www.eff.org/rss/podcast/mp3.xml", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Line Noise Podcast", "urls_url" : "http://www.eff.org/rss/podcast/mp3.xml", "urls_urltype" : "Feed" @@ -1347,6 +1457,7 @@ "id" : 14, "latest_ep" : "2023-01-06 14:56:27", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -1359,10 +1470,11 @@ "urls_id" : 14, "urls_image" : "https://linuxafterdark.net/wp-content/uploads/2022/07/LAD.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:46:19", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxafterdark.net", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux After Dark", "urls_url" : "https://linuxafterdark.net/feed/podcast", "urls_urltype" : "Feed" @@ -1385,6 +1497,7 @@ "id" : 15, "latest_ep" : "2022-12-18 10:56:13", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -1397,10 +1510,11 @@ "urls_id" : 15, "urls_image" : "https://latenightlinux.com/LDT-3000.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:46:23", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxdowntime.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Downtime", "urls_url" : "https://latenightlinux.com/feed/extra", "urls_urltype" : "Feed" @@ -1423,6 +1537,7 @@ "id" : 16, "latest_ep" : "2023-01-09 00:22:29", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml;charset=UTF-8", "urls_copyright" : null, @@ -1435,10 +1550,11 @@ "urls_id" : 16, "urls_image" : null, "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:47:02", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxgamecast.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Game Cast", "urls_url" : "https://linuxgamecast.com/feed/", "urls_urltype" : "Feed" @@ -1461,6 +1577,7 @@ "id" : 48, "latest_ep" : "2023-01-09 00:22:29", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "CC BY-SA LinuxGameCast LLP 2022", @@ -1473,10 +1590,11 @@ "urls_id" : 48, "urls_image" : "https://linuxgamecast.com/wp-content/uploads/powerpress/2020ApplCover.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:44:12", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxgamecast.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Game Cast", "urls_url" : "http://feeds.feedburner.com/LinuxgamecastWeeklyMp3", "urls_urltype" : "Feed" @@ -1499,6 +1617,7 @@ "id" : 49, "latest_ep" : "2014-01-26 16:30:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/x-rss+xml", "urls_copyright" : "Creative Commons License Some Rights Reserved", @@ -1511,10 +1630,11 @@ "urls_id" : 49, "urls_image" : null, "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:44:34", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://linuxindahouse.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux In Da House MP3 Feed", "urls_url" : "http://linuxindahouse.com/linuxindahouse_mp3.rss", "urls_urltype" : "Feed" @@ -1537,6 +1657,7 @@ "id" : 50, "latest_ep" : "2023-01-05 02:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : "Linux Inlaws (c) 2020 CC-BY-SA", @@ -1549,10 +1670,11 @@ "urls_id" : 50, "urls_image" : null, "urls_language" : "en-gb", - "urls_last_update" : "2023-01-09 16:44:51", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxinlaws.eu", "urls_modified" : "2023-01-05 02:00:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Inlaws", "urls_url" : "https://linuxinlaws.eu/inlaws_rss.xml", "urls_urltype" : "Feed" @@ -1575,6 +1697,7 @@ "id" : 51, "latest_ep" : "2022-12-30 11:50:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "Released under the Creative Commons Attribution-Share Alike 3.0 Unported Licence", @@ -1587,10 +1710,11 @@ "urls_id" : 51, "urls_image" : "https://linuxlads.com/images/ll_3000.png", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:45:04", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxlads.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Lads", "urls_url" : "https://linuxlads.com/feed_ogg.rss", "urls_urltype" : "Feed" @@ -1613,6 +1737,7 @@ "id" : 52, "latest_ep" : "2015-11-30 19:07:19", "urls_author" : "linuxoutlaws@sixgun.org (Sixgun Productions)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Copyright © 2007-2012 Sixgun Productions http://creativecommons.org/licenses/by-sa/3.0/", @@ -1625,10 +1750,11 @@ "urls_id" : 52, "urls_image" : "http://sixgun.org/files/linuxoutlaws.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:45:26", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://sixgun.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Outlaws", "urls_url" : "http://feeds.feedburner.com/linuxoutlaws", "urls_urltype" : "Feed" @@ -1651,6 +1777,7 @@ "id" : 53, "latest_ep" : "2008-03-26 13:14:02", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Linux Reality is released under a Attribution-Noncommercial-No Derivative Works 3.0 United States licence.", @@ -1663,10 +1790,11 @@ "urls_id" : 53, "urls_image" : null, "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:45:43", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.linuxreality.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Reality Podcast (MP3 Feed)", "urls_url" : "http://feeds.feedburner.com/linuxreality", "urls_urltype" : "Feed" @@ -1689,6 +1817,7 @@ "id" : 54, "latest_ep" : "2013-01-14 20:30:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/xml", "urls_copyright" : "Creative Commons License Some Rights Reserved", @@ -1701,14 +1830,55 @@ "urls_id" : 54, "urls_image" : "http://www.setbit.org/lt-logo.jpg", "urls_language" : null, - "urls_last_update" : "2023-01-09 16:46:00", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://setbit.org/lt.html", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux Trivia Podcast", "urls_url" : "http://setbit.org/lt-ogg.xml", "urls_urltype" : "Feed" }, + { + "ep_author" : "Linux User Space", + "ep_byte_length" : 363624, + "ep_category" : "", + "ep_enclosure" : "https://aphid.fireside.fm/d/1437767933/e78a2140-b820-478c-9506-054f2b7e2de2/5c0410db-1f95-443d-b4d4-1ffb709c46a6.mp3", + "ep_ep_id" : "5c0410db-1f95-443d-b4d4-1ffb709c46a6", + "ep_id" : 6464, + "ep_issued" : "2023-01-02 06:00:00", + "ep_last_update" : "2023-01-11 17:04:56", + "ep_link" : "https://www.linuxuserspace.show/3xx", + "ep_mime_type" : "audio/mpeg", + "ep_modified" : null, + "ep_source" : null, + "ep_title" : "A Pause for Health", + "ep_urls_id" : 98, + "id" : 98, + "latest_ep" : "2023-01-02 06:00:00", + "urls_author" : null, + "urls_check_type" : "manual", + "urls_child_count" : 0, + "urls_content_type" : "application/xml; charset=utf-8", + "urls_copyright" : "© 2023 Dan Simmons & Leo Chavez", + "urls_description" : "How did your favorite Linux distribution get its start? Join us and find out! Linux User Space is hosted by Leo and Dan, and every two weeks we deep dive into the history of Linux distributions and the things that matter to us. Episodes drop every other Monday.", + "urls_dns" : "45.33.51.100", + "urls_feedformat" : "RSS 2.0", + "urls_generator" : "Fireside (https://fireside.fm)", + "urls_host_up" : 1, + "urls_http_status" : "200 OK", + "urls_id" : 98, + "urls_image" : null, + "urls_language" : "en-us", + "urls_last_update" : "2023-01-14 20:48:07", + "urls_link" : "https://www.linuxuserspace.show", + "urls_modified" : "2023-01-02 11:45:06", + "urls_parent_id" : null, + "urls_reason_accepted" : "Website is under a CC licence", + "urls_title" : "Linux User Space", + "urls_url" : "https://www.linuxuserspace.show/rss", + "urls_urltype" : "Feed" + }, { "ep_author" : null, "ep_byte_length" : 32959283, @@ -1727,6 +1897,7 @@ "id" : 55, "latest_ep" : "2021-04-04 00:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "CC BY 4.0", @@ -1739,10 +1910,11 @@ "urls_id" : 55, "urls_image" : "https://www.linuxatwork.org/img/logo-itunes.jpg", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:46:26", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://www.linuxatwork.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux at Work", "urls_url" : "http://feeds.podtrac.com/mBdfP0QTX0iY", "urls_urltype" : "Feed" @@ -1765,6 +1937,7 @@ "id" : 56, "latest_ep" : "2022-12-15 16:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "CC-BY-NC-4.0", @@ -1777,10 +1950,11 @@ "urls_id" : 56, "urls_image" : "https://lhspodcast.info/wp-content/uploads/2016/05/cropped-lhs-newlogo-600x600-1-32x32.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:46:56", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://lhspodcast.info/category/podcast-mp3/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux in the Ham Shack", "urls_url" : "http://lhspodcast.info/category/podcast-mp3/feed/", "urls_urltype" : "Feed" @@ -1803,6 +1977,7 @@ "id" : 57, "latest_ep" : "2022-12-15 16:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "Attribution-NonCommercial-NoDerivatives 4.0 International", @@ -1815,10 +1990,11 @@ "urls_id" : 57, "urls_image" : "https://lhspodcast.info/wp-content/uploads/2016/05/cropped-lhs-newlogo-600x600-1-32x32.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:48:18", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://lhspodcast.info/category/podcast-ogg/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linux in the Ham Shack (OGG Feed)", "urls_url" : "https://lhspodcast.info/category/podcast-ogg/feed/", "urls_urltype" : "Feed" @@ -1841,6 +2017,7 @@ "id" : 58, "latest_ep" : "2023-01-08 21:35:48", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative commons Attribution 4.0 International (CC BY 4.0)", @@ -1853,10 +2030,11 @@ "urls_id" : 58, "urls_image" : "http://linuxlugcast.com/wp-content/uploads/powerpress/p0311718-188662.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:48:58", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxlugcast.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linuxlugcast", "urls_url" : "http://feeds.feedburner.com/linuxlugcast-ogg", "urls_urltype" : "Feed" @@ -1879,6 +2057,7 @@ "id" : 59, "latest_ep" : "2023-01-08 21:35:48", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative commons Attribution 4.0 International (CC BY 4.0)", @@ -1891,10 +2070,11 @@ "urls_id" : 59, "urls_image" : "http://linuxlugcast.com/wp-content/uploads/powerpress/p0311718-188662.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:49:14", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://linuxlugcast.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Linuxlugcast", "urls_url" : "http://feeds.feedburner.com/linuxlugcast/dBDY", "urls_urltype" : "Feed" @@ -1917,6 +2097,7 @@ "id" : 60, "latest_ep" : "2011-07-07 00:00:00", "urls_author" : "show@lugradio.org (LugRadio)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "LUGRadio is released under a Creative Commons Attribution\nNonCommercial NoDerivs licence.", @@ -1929,10 +2110,11 @@ "urls_id" : 60, "urls_image" : "http://audio.lugradio.org/art_200x200.jpg", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:49:38", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.lugradio.org/episodes.ogg.rss", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "LugRadio (high-quality ogg)", "urls_url" : "http://www.lugradio.org/episodes.ogg.rss", "urls_urltype" : "Feed" @@ -1955,6 +2137,7 @@ "id" : 61, "latest_ep" : "2021-07-16 12:19:14", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license.", @@ -1967,10 +2150,11 @@ "urls_id" : 61, "urls_image" : "https://makerscorner.tech/wp-content/uploads/2020/01/makers_corner_itunes_coverart.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:49:51", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://makerscorner.tech", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Makers Corner, with Nate and Yannick", "urls_url" : "https://makerscorner.tech/feed/podcast/", "urls_urltype" : "Feed" @@ -1993,6 +2177,7 @@ "id" : 17, "latest_ep" : "2022-12-14 21:08:29", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -2005,10 +2190,11 @@ "urls_id" : 17, "urls_image" : "https://mintcast.org/wp-content/uploads/2020/03/big-logo-1600.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:47:25", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://mintcast.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "OGG – mintCast", "urls_url" : "https://mintcast.org/category/ogg/feed/", "urls_urltype" : "Feed" @@ -2031,6 +2217,7 @@ "id" : 62, "latest_ep" : "2011-08-16 11:27:00", "urls_author" : "press@softwarefreedom.org", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "2008, 2009, 2010, 2011, Software Freedom Law Center. Licensed under a Creative Commons Attribution-No Derivative Works 3.0 United States License.", @@ -2043,10 +2230,11 @@ "urls_id" : 62, "urls_image" : "http://www.softwarefreedom.org/img/podcast/sflc-key-200x200.jpg", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:50:16", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.softwarefreedom.org/podcast/http://www.softwarefreedom.org/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "OggcastSoftware Freedom Law Center", "urls_url" : "http://www.softwarefreedom.org/feeds/podcast-mp3/", "urls_urltype" : "Feed" @@ -2069,6 +2257,7 @@ "id" : 63, "latest_ep" : "2022-10-18 16:09:47", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml; charset=utf-8", "urls_copyright" : "Creative Commons", @@ -2081,10 +2270,11 @@ "urls_id" : 63, "urls_image" : "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_nologo/12892410/12892410-1613674549954-b2efc05b9037a.jpg", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:50:42", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://anchor.fm/creativecommons", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Open Minds … from Creative Commons", "urls_url" : "https://anchor.fm/s/4d70d828/podcast/rss", "urls_urltype" : "Feed" @@ -2107,6 +2297,7 @@ "id" : 64, "latest_ep" : "2023-01-09 00:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml; charset=utf-8", "urls_copyright" : "This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.", @@ -2119,10 +2310,11 @@ "urls_id" : 64, "urls_image" : "https://ssl-static.libsyn.com/p/assets/b/4/6/1/b461334e2a151deb/avatars-000255353190-hvaldy-original.jpg", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:50:57", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://opensourcesecuritypodcast.com", "urls_modified" : "2023-01-09 00:00:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Open Source Security Podcast", "urls_url" : "https://opensourcesecuritypodcast.libsyn.com/rss", "urls_urltype" : "Feed" @@ -2145,6 +2337,7 @@ "id" : 18, "latest_ep" : "2023-01-03 13:00:27", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml;charset=UTF-8", "urls_copyright" : null, @@ -2157,10 +2350,11 @@ "urls_id" : 18, "urls_image" : "https://podcastle.org/wp-content/uploads/2017/10/cropped-PC-Chip2-32x32.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:47:44", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://podcastle.org/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "PodCastle", "urls_url" : "http://podcastle.org/feed/", "urls_urltype" : "Feed" @@ -2183,6 +2377,7 @@ "id" : 65, "latest_ep" : "2023-01-05 00:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Este trabalho está licenciado com uma Licença Creative Commons - Atribuição 4.0 Internacional - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -2195,10 +2390,11 @@ "urls_id" : 65, "urls_image" : "https://podcastubuntuportugal.org/images/thumbnail.png", "urls_language" : "pt-pt", - "urls_last_update" : "2023-01-09 16:51:26", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://podcastubuntuportugal.org/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Podcast Ubuntu Portugal", "urls_url" : "https://podcastubuntuportugal.org/feed/podcast/", "urls_urltype" : "Feed" @@ -2221,6 +2417,7 @@ "id" : 66, "latest_ep" : "2022-12-12 14:46:35", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative Commons by-nc-sa http://creativecommons.org/licenses/by-nc-sa/2.5/", @@ -2233,10 +2430,11 @@ "urls_id" : 66, "urls_image" : null, "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:51:42", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://craphound.com", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Podcast – Cory Doctorow's craphound.com", "urls_url" : "http://feeds.feedburner.com/doctorow_podcast", "urls_urltype" : "Feed" @@ -2259,6 +2457,7 @@ "id" : 19, "latest_ep" : "2011-07-18 11:50:11", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml; charset=UTF-8", "urls_copyright" : null, @@ -2271,10 +2470,11 @@ "urls_id" : 19, "urls_image" : null, "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:47:51", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://blog.launchpad.net", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Podcast – Launchpad blog", "urls_url" : "http://news.launchpad.net/category/podcast/feed", "urls_urltype" : "Feed" @@ -2297,6 +2497,7 @@ "id" : 20, "latest_ep" : "2023-01-06 05:01:05", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -2309,10 +2510,11 @@ "urls_id" : 20, "urls_image" : "https://pseudopod.org/wp-content/uploads/2018/04/cropped-PseudoPod-chip-32x32.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:47:53", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://pseudopod.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "PseudoPod", "urls_url" : "http://pseudopod.org/feed/", "urls_urltype" : "Feed" @@ -2335,6 +2537,7 @@ "id" : 67, "latest_ep" : "2022-12-31 09:33:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "© Creative Commons - BY-SA 3.0 Unported", @@ -2347,10 +2550,11 @@ "urls_id" : 67, "urls_image" : "http://archiv.radiotux.de/werbematerial/icons/rt-id3.png", "urls_language" : "de", - "urls_last_update" : "2023-01-09 16:51:57", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://www.radiotux.de/", "urls_modified" : "2023-01-04 11:11:32", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "RadioTux", "urls_url" : "http://radiotux.de/podcast/rss/radiotux-all.xml", "urls_urltype" : "Feed" @@ -2373,6 +2577,7 @@ "id" : 68, "latest_ep" : "2015-12-31 21:30:04", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative Commons BY-SA Licensed", @@ -2385,14 +2590,55 @@ "urls_id" : 68, "urls_image" : "http://ratholeradio.org/rathole_cover.png", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-09 16:52:18", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://ratholeradio.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "RatholeRadio.org (Ogg Version)", "urls_url" : "http://feeds.feedburner.com/RatholeRadio-ogg", "urls_urltype" : "Feed" }, + { + "ep_author" : "feedback@scienceforthepeople.ca (Rachelle Saunders, Bethany Brookshire, and Carolyn Wilke)", + "ep_byte_length" : 65400340, + "ep_category" : "", + "ep_enclosure" : "http://www.podtrac.com/pts/redirect.mp3/podcasts.scienceforthepeople.ca/episodes/Science_for_the_People_616_The_One_About_Sex.mp3", + "ep_ep_id" : "http://www.podtrac.com/pts/redirect.mp3/podcasts.scienceforthepeople.ca/episodes/Science_for_the_People_616_The_One_About_Sex.mp3", + "ep_id" : 6619, + "ep_issued" : "2022-12-20 00:00:00", + "ep_last_update" : "2023-01-14 23:08:22", + "ep_link" : "http://www.podtrac.com/pts/redirect.mp3/podcasts.scienceforthepeople.ca/episodes/Science_for_the_People_616_The_One_About_Sex.mp3", + "ep_mime_type" : "audio/mpeg", + "ep_modified" : null, + "ep_source" : null, + "ep_title" : "#616 The one about sex ", + "ep_urls_id" : 100, + "id" : 100, + "latest_ep" : "2022-12-20 00:00:00", + "urls_author" : null, + "urls_check_type" : null, + "urls_child_count" : 0, + "urls_content_type" : "text/xml; charset=utf-8", + "urls_copyright" : "Copyright now Science for the People", + "urls_description" : "Science for the People is a long-format interview podcast that explores the connections between science, popular culture, history, and public policy, to help listeners understand the evidence and arguments behind what's in the news and on the shelves. Our hosts sit down with science researchers, writers, authors, journalists, and experts to discuss science from the past, the science that affects our lives today, and how science might change our future.", + "urls_dns" : "172.217.169.78", + "urls_feedformat" : "RSS 2.0", + "urls_generator" : null, + "urls_host_up" : 1, + "urls_http_status" : "200 OK", + "urls_id" : 100, + "urls_image" : "http://podcasts.scienceforthepeople.ca/sftp-itunes-cover.jpg", + "urls_language" : "en-us", + "urls_last_update" : "2023-01-14 23:08:22", + "urls_link" : "http://www.scienceforthepeople.ca/", + "urls_modified" : null, + "urls_parent_id" : null, + "urls_reason_accepted" : "Website is under a CC licence", + "urls_title" : "Science for the People", + "urls_url" : "http://feeds.feedburner.com/SkepticallySpeaking", + "urls_urltype" : "Feed" + }, { "ep_author" : null, "ep_byte_length" : 59336495, @@ -2411,6 +2657,7 @@ "id" : 69, "latest_ep" : "2023-01-03 20:47:30", "urls_author" : "distro@twit.tv (TWiT Engineering)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -2423,10 +2670,11 @@ "urls_id" : 69, "urls_image" : "https://elroy.twit.tv/sites/default/files/styles/twit_album_art_2048x2048/public/images/shows/security_now/album_art/audio/sn2022_albumart_standard_2400.jpg?itok=hQwhlisn", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:52:31", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://twit.tv/shows/security-now", "urls_modified" : "2023-01-04 10:41:01", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Security Now (Audio)", "urls_url" : "http://feeds.twit.tv/sn.xml", "urls_urltype" : "Feed" @@ -2449,6 +2697,7 @@ "id" : 70, "latest_ep" : "2017-02-18 00:07:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative Commons Attribution-NonCommercial-No Derivative Works 2.0 UK: England & Wales", @@ -2461,10 +2710,11 @@ "urls_id" : 70, "urls_image" : null, "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:52:59", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.skepticule.co.uk/", "urls_modified" : "2022-08-18 15:47:26", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Skepticule", "urls_url" : "http://www.skepticule.co.uk/feeds/posts/default?alt=rss", "urls_urltype" : "Feed" @@ -2487,6 +2737,7 @@ "id" : 71, "latest_ep" : "2022-12-22 00:00:00", "urls_author" : "web@lists.fsfe.org (FSFE Webmaster Team)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/x-rss+xml", "urls_copyright" : "Copyright (c) Free Software Foundation Europe. Creative Commons BY-SA 4.0", @@ -2499,10 +2750,11 @@ "urls_id" : 71, "urls_image" : "https://fsfe.org/graphics/podcast-logo.png", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:53:26", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://fsfe.org/news/podcast", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Software Freedom Podcast", "urls_url" : "http://fsfe.org/news/podcast.en.rss", "urls_urltype" : "Feed" @@ -2525,6 +2777,7 @@ "id" : 72, "latest_ep" : "2022-12-22 00:00:00", "urls_author" : "web@lists.fsfe.org (FSFE Webmaster Team)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/x-rss+xml", "urls_copyright" : "Copyright (c) Free Software Foundation Europe. Creative Commons BY-SA 4.0", @@ -2537,10 +2790,11 @@ "urls_id" : 72, "urls_image" : "https://fsfe.org/graphics/podcast-logo.png", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:53:38", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://fsfe.org/news/podcast", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Software Freedom Podcast", "urls_url" : "http://fsfe.org/news/podcast-opus.en.rss", "urls_urltype" : "Feed" @@ -2563,6 +2817,7 @@ "id" : 73, "latest_ep" : "2022-12-15 00:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license.", @@ -2575,10 +2830,11 @@ "urls_id" : 73, "urls_image" : "https://teaearlgreyhot.org/wp-content/uploads/2020/03/tea_earl_grey_hot_artwork.jpg", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-09 16:54:00", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://teaearlgreyhot.org/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Tea, Earl Grey, Hot !", "urls_url" : "https://teaearlgreyhot.org/feed/podcast", "urls_urltype" : "Feed" @@ -2601,6 +2857,7 @@ "id" : 94, "latest_ep" : "2022-11-19 13:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "CC BY-NC-SA 4.0 Attribution-NonCommercial-ShareAlike 4.0 International", @@ -2613,10 +2870,11 @@ "urls_id" : 94, "urls_image" : "https://thelovebug.org/wp-content/uploads/TheBigSlurp.jpg", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-10 19:05:28", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://thelovebug.org/series/slurp/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Big Slurp", "urls_url" : "https://thelovebug.org/feed/podcast/slurp", "urls_urltype" : "Feed" @@ -2639,6 +2897,7 @@ "id" : 74, "latest_ep" : "2020-10-25 14:40:00", "urls_author" : "info@thebinarytimes.net", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license.", @@ -2651,10 +2910,11 @@ "urls_id" : 74, "urls_image" : "https://www.thebinarytimes.net/favicon-32x32.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:54:31", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://www.thebinarytimes.net", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Binary Times Audiocast - ogg", "urls_url" : "https://www.thebinarytimes.net/rss-ogg.xml", "urls_urltype" : "Feed" @@ -2677,6 +2937,7 @@ "id" : 22, "latest_ep" : "2022-12-31 02:00:28", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -2689,10 +2950,11 @@ "urls_id" : 22, "urls_image" : "https://www.thebugcast.org/wp-content/uploads/1400x1400-A.jpg", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-09 15:48:20", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://thebugcast.org/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Bugcast - Ogg Feed", "urls_url" : "http://thebugcast.org/feed/ogg/", "urls_urltype" : "Feed" @@ -2715,6 +2977,7 @@ "id" : 75, "latest_ep" : "2022-12-23 06:00:44", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative Commons", @@ -2727,10 +2990,11 @@ "urls_id" : 75, "urls_image" : "http://petecogle.co.uk/images/dsz_1400x1400.jpg", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:54:45", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://petecogle.co.uk/category/the-dub-zone/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Dub Zone", "urls_url" : "http://feeds.feedburner.com/TheDubZone", "urls_urltype" : "Feed" @@ -2753,6 +3017,7 @@ "id" : 23, "latest_ep" : "2020-01-03 16:00:03", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -2765,10 +3030,11 @@ "urls_id" : 23, "urls_image" : "https://duffercast.org/wp-content/uploads/duffercastorg-2.png", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:48:25", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://duffercast.org/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Duffercast in Ogg Vorbis", "urls_url" : "http://duffercast.org/feed/podcast/", "urls_urltype" : "Feed" @@ -2791,6 +3057,7 @@ "id" : 95, "latest_ep" : "2023-01-07 13:01:07", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "CC-SA 2016-present, Full Circle Magazine", @@ -2803,10 +3070,11 @@ "urls_id" : 95, "urls_image" : "https://i0.wp.com/fullcirclemagazine.org/wp-content/uploads/2017/01/FullCircle-WeeklyNews_image.jpg?fit=640%2C425&ssl=1", "urls_language" : "en-US", - "urls_last_update" : "2023-01-10 19:11:18", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://fullcirclemagazine.org/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Full Circle Weekly News", "urls_url" : "https://fullcirclemagazine.org/feed/podcast", "urls_urltype" : "Feed" @@ -2829,6 +3097,7 @@ "id" : 76, "latest_ep" : "2021-12-18 17:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml", "urls_copyright" : "Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 England & Wales Licence", @@ -2841,10 +3110,11 @@ "urls_id" : 76, "urls_image" : null, "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:55:00", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.jodcast.net/", "urls_modified" : "2021-12-18 17:22:28", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Jodcast (high bandwidth)", "urls_url" : "http://www.jodcast.net/rss-high.xml", "urls_urltype" : "Feed" @@ -2867,6 +3137,7 @@ "id" : 24, "latest_ep" : "2017-04-23 23:56:05", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -2879,10 +3150,11 @@ "urls_id" : 24, "urls_image" : "http://www.jupiterbroadcasting.com/images/LAS-300-Badge144.jpg", "urls_language" : "en", - "urls_last_update" : "2023-01-09 15:48:31", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.jupiterbroadcasting.com", "urls_modified" : "2017-05-08 13:50:51", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Linux Action Show! OGG", "urls_url" : "http://feeds2.feedburner.com/TheLinuxActionShowOGG", "urls_urltype" : "Feed" @@ -2905,6 +3177,7 @@ "id" : 25, "latest_ep" : "2022-12-09 00:00:00", "urls_author" : "Matt", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -2917,10 +3190,11 @@ "urls_id" : 25, "urls_image" : null, "urls_language" : null, - "urls_last_update" : "2023-01-09 15:48:40", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://thelinuxcast.org/", "urls_modified" : "2022-12-09 00:00:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Linux Cast", "urls_url" : "https://thelinuxcast.org/feed/feed.xml", "urls_urltype" : "Feed" @@ -2943,6 +3217,7 @@ "id" : 77, "latest_ep" : "2023-01-04 22:30:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "TLLTS is licensed under Creative Commons License for Non-Commercial Use", @@ -2955,10 +3230,11 @@ "urls_id" : 77, "urls_image" : "http://www.thelinuxlink.net/images/tllts_sitelogo.png", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:55:19", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.tllts.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Linux Link Tech Show Ogg-Vorbis Feed", "urls_url" : "http://feeds.feedburner.com/TheLinuxLinkTechShowOgg-vorbisFeed", "urls_urltype" : "Feed" @@ -2981,6 +3257,7 @@ "id" : 78, "latest_ep" : "2023-01-04 22:30:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "TLLTS is licensed under Creative Commons License for Non-Commercial Use", @@ -2993,10 +3270,11 @@ "urls_id" : 78, "urls_image" : "http://www.thelinuxlink.net/images/tllts_sitelogo.png", "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 16:55:38", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.tllts.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "The Linux Link Tech Show Ogg-Vorbis Feed", "urls_url" : "http://www.thelinuxlink.net/tllts/tllts_ogg.rss", "urls_urltype" : "Feed" @@ -3019,6 +3297,7 @@ "id" : 79, "latest_ep" : "2020-03-19 14:37:12", "urls_author" : "distro@twit.tv (TWiT Engineering)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -3031,10 +3310,11 @@ "urls_id" : 79, "urls_image" : "https://elroy.twit.tv/sites/default/files/styles/twit_album_art_2048x2048/public/images/shows/this_week_in_computer_hardware/album_art/audio/twich_albumart_audio.jpg?itok=jfLJprnC", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:55:51", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://twit.tv/shows/this-week-in-computer-hardware", "urls_modified" : "2022-10-14 10:55:52", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "This Week in Computer Hardware (Audio)", "urls_url" : "http://feeds.twit.tv/twich.xml", "urls_urltype" : "Feed" @@ -3057,6 +3337,7 @@ "id" : 80, "latest_ep" : "2023-01-04 20:14:00", "urls_author" : "distro@twit.tv (TWiT Engineering)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -3069,10 +3350,11 @@ "urls_id" : 80, "urls_image" : "https://elroy.twit.tv/sites/default/files/styles/twit_album_art_2048x2048/public/images/shows/this_week_in_google/album_art/audio/twig2022_albumart_standard_2400.jpg?itok=bWIu02YI", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:56:04", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://twit.tv/shows/this-week-in-google", "urls_modified" : "2023-01-04 20:40:02", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "This Week in Google (Audio)", "urls_url" : "http://feeds.twit.tv/twig.xml", "urls_urltype" : "Feed" @@ -3095,6 +3377,7 @@ "id" : 81, "latest_ep" : "2022-12-29 05:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : "Creative Commons Attribution - Noncommercial", @@ -3107,10 +3390,11 @@ "urls_id" : 81, "urls_image" : "https://ssl-static.libsyn.com/p/assets/6/c/0/5/6c055f7feb4ada27/TWiM_v3_white2400.jpg", "urls_language" : "en", - "urls_last_update" : "2023-01-09 16:56:18", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://www.asm.org/twim/", "urls_modified" : "2022-12-29 05:00:00", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "This Week in Microbiology", "urls_url" : "http://feeds.feedburner.com/twim", "urls_urltype" : "Feed" @@ -3133,6 +3417,7 @@ "id" : 82, "latest_ep" : "2023-01-08 17:27:02", "urls_author" : "distro@twit.tv (TWiT Engineering)", + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml", "urls_copyright" : "This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/", @@ -3145,10 +3430,11 @@ "urls_id" : 82, "urls_image" : "https://elroy.twit.tv/sites/default/files/styles/twit_album_art_2048x2048/public/images/shows/this_week_in_tech/album_art/audio/twit_2022albumart_standard_2048.jpg?itok=NNZEJLnI", "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 16:56:36", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://twit.tv/shows/this-week-in-tech", "urls_modified" : "2023-01-08 21:00:03", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "This Week in Tech (Audio)", "urls_url" : "http://feeds.twit.tv/twit.xml", "urls_urltype" : "Feed" @@ -3171,6 +3457,7 @@ "id" : 83, "latest_ep" : "2022-12-17 00:14:48", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)", @@ -3183,10 +3470,11 @@ "urls_id" : 83, "urls_image" : "http://tuxjam.otherside.network/wp-content/uploads/sites/5/powerpress/Cover2.jpg", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-09 16:56:53", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://tuxjam.otherside.network/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "TuxJam OGG", "urls_url" : "https://tuxjam.otherside.network/?feed=podcast", "urls_urltype" : "Feed" @@ -3209,6 +3497,7 @@ "id" : 26, "latest_ep" : "2021-09-30 14:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : null, @@ -3221,10 +3510,11 @@ "urls_id" : 26, "urls_image" : "https://ubuntupodcast.org/wp-content/uploads/2015/12/uplogo_388-150x150.png", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-09 15:48:52", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://ubuntupodcast.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Ubuntu Podcast", "urls_url" : "http://ubuntupodcast.org/feed/", "urls_urltype" : "Feed" @@ -3247,6 +3537,7 @@ "id" : 84, "latest_ep" : "2021-09-30 14:00:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "Copyright Ubuntu Podcast Team. Some rights reserved. This audio is released under a Creative Commons Attribution-Share Alike license.", @@ -3259,10 +3550,11 @@ "urls_id" : 84, "urls_image" : "http://ubuntupodcast.org/wp-content/uploads/powerpress/uplogo_1400.png", "urls_language" : "en-GB", - "urls_last_update" : "2023-01-09 16:57:07", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://ubuntupodcast.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Ubuntu Podcast", "urls_url" : "http://feed.ubuntupodcast.org/mp3", "urls_urltype" : "Feed" @@ -3285,6 +3577,7 @@ "id" : 85, "latest_ep" : "2022-12-28 08:02:55", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=UTF-8", "urls_copyright" : "CC BY-SA 4.0 Wikipediapodden", @@ -3297,10 +3590,11 @@ "urls_id" : 85, "urls_image" : "http://wikipediapodden.se/wp-content/uploads/2019/05/FB-profile-150x150.png", "urls_language" : "sv-SE", - "urls_last_update" : "2023-01-09 16:57:36", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://wikipediapodden.se/prenumerera/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "Wikipediapodden", "urls_url" : "http://wikipediapodden.se/feed/podcast/", "urls_urltype" : "Feed" @@ -3323,6 +3617,7 @@ "id" : 27, "latest_ep" : "2017-02-09 12:55:00", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -3335,10 +3630,11 @@ "urls_id" : 27, "urls_image" : null, "urls_language" : "en-us", - "urls_last_update" : "2023-01-09 15:49:02", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "http://bsdtalk.blogspot.com/", "urls_modified" : "2022-12-14 04:41:56", "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "bsdtalk", "urls_url" : "http://feeds.feedburner.com/Bsdtalk", "urls_urltype" : "Feed" @@ -3361,6 +3657,7 @@ "id" : 28, "latest_ep" : "2017-03-18 10:18:55", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "application/rss+xml; charset=UTF-8", "urls_copyright" : null, @@ -3373,10 +3670,11 @@ "urls_id" : 28, "urls_image" : null, "urls_language" : "en-US", - "urls_last_update" : "2023-01-09 15:49:12", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://fullcirclemagazine.org", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "podcast – Full Circle Magazine", "urls_url" : "http://fullcirclemagazine.org/category/podcast/feed/", "urls_urltype" : "Feed" @@ -3399,6 +3697,7 @@ "id" : 29, "latest_ep" : "2022-12-23 04:16:08", "urls_author" : null, + "urls_check_type" : "auto", "urls_child_count" : 0, "urls_content_type" : "text/xml; charset=utf-8", "urls_copyright" : null, @@ -3411,10 +3710,11 @@ "urls_id" : 29, "urls_image" : null, "urls_language" : "en", - "urls_last_update" : "2023-01-09 15:49:14", + "urls_last_update" : "2023-01-14 20:48:07", "urls_link" : "https://urandom-podcast.info/", "urls_modified" : null, "urls_parent_id" : null, + "urls_reason_accepted" : "", "urls_title" : "urandom podcast", "urls_url" : "http://feeds.feedburner.com/urandom-podcast/ogg", "urls_urltype" : "Feed" diff --git a/feedWatcher.mkd b/feedWatcher.mkd index 8a5248e..fde1bd4 100644 --- a/feedWatcher.mkd +++ b/feedWatcher.mkd @@ -2,459 +2,474 @@ ### The finest selection of Free Culture Podcasts spanning the genres of Discussion, Drama, Education, Music, and beyond. +- **2.5 Admins** + - Website: https://2.5admins.com + - Feed: https://2.5admins.com/feed/podcast + - Copyright: + - **Admin Admin Podcast** - Website: https://www.adminadminpodcast.co.uk - Feed: http://feeds.feedburner.com/TheAdminAdminPodcast - - Licence: + - Copyright: - **All About Android (Audio)** - Website: https://twit.tv/shows/all-about-android - Feed: http://feeds.twit.tv/aaa.xml - - Licence: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **All In IT Radio (ogg)** - Website: http://aiit.se/radio/ - Feed: http://feeds.aiit.se/allinit-radio-ogg - - Licence: + - Copyright: - **AmateurLogic.TV** - Website: http://www.amateurlogic.tv - Feed: http://amateurlogic.tv/transmitter/feeds/ipod.xml - - Licence: Creative Commons + - Copyright: Creative Commons - **Ask Noah Show** - Website: https://podcast.asknoahshow.com - Feed: https://feeds.fireside.fm/asknoah/rss - - Licence: © 2023 CC-BY-ND + - Copyright: © 2023 CC-BY-ND - **CCHits.net** - Website: https://cchits.net/daily - Feed: https://cchits.net/daily/rss - - Licence: The content created by this site is generated by a script which is licensed under the Affero General Public License version 3 (AGPL3). The generated content is released under a Creative Commons By-Attribution License. + - Copyright: The content created by this site is generated by a script which is licensed under the Affero General Public License version 3 (AGPL3). The generated content is released under a Creative Commons By-Attribution License. - **CCJam** - Website: https://ccjam.otherside.network/ - Feed: https://ccjam.otherside.network/feed/podcast/ - - Licence: + - Copyright: - **Destination Linux** - Website: https://destinationlinux.org - Feed: http://destinationlinux.org/feed/mp3/ - - Licence: + - Copyright: - **Edict Zero** - Website: https://edictzero.com - Feed: https://edictzero.wordpress.com/feed/ - - Licence: + - Copyright: - **English – Wikipediapodden** - Website: http://wikipediapodden.se - Feed: http://wikipediapodden.se/tag/english/feed/ - - Licence: CC BY-SA 4.0 Wikipediapodden + - Copyright: CC BY-SA 4.0 Wikipediapodden - **Escape Pod** - Website: https://escapepod.org - Feed: http://escapepod.org/feed/ - - Licence: + - Copyright: - **Expedition Sasquatch** - Website: https://ExpeditionSasquatch.org - Feed: https://expeditionsasquatch.org/episodes.mp3.rss - - Licence: CC BY SA 4.0 + - Copyright: CC BY SA 4.0 - **FLOSS Weekly (Audio)** - Website: https://twit.tv/shows/floss-weekly - Feed: http://leoville.tv/podcasts/floss.xml - - Licence: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **FLOSS Weekly (Audio)** - Website: https://twit.tv/shows/floss-weekly - Feed: http://feeds.twit.tv/floss.xml - - Licence: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **FOSS and Crafts** - Website: https://fossandcrafts.org - Feed: https://fossandcrafts.org/rss-feed.rss - - Licence: Licensed under CC BY-SA 4.0 International + - Copyright: Licensed under CC BY-SA 4.0 International - **FSFE Events** - Website: https://fsfe.org/events/ - Feed: https://fsfe.org/events/events.en.rss - - Licence: Copyright (c) Free Software Foundation Europe. Verbatim copying and distribution + - Copyright: Copyright (c) Free Software Foundation Europe. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. - **FSFE News** - Website: https://fsfe.org/news/ - Feed: https://fsfe.org/news/news.en.rss - - Licence: Copyright (c) Free Software Foundation Europe. Verbatim copying and distribution + - Copyright: Copyright (c) Free Software Foundation Europe. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. - **Free as in Freedom** - Website: http://faif.us/cast/ - Feed: http://faif.us/feeds/cast-ogg/ - - Licence: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021, Free as in Freedom. Licensed under a Creative Commons Attribution-Share Alike 3.0 USA License. + - Copyright: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021, Free as in Freedom. Licensed under a Creative Commons Attribution-Share Alike 3.0 USA License. - **Free as in Freedom** - Website: http://faif.us/cast/ - Feed: http://faif.us/feeds/cast-mp3/ - - Licence: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021, Free as in Freedom. Licensed under a Creative Commons Attribution-Share Alike 3.0 USA License. + - Copyright: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021, Free as in Freedom. Licensed under a Creative Commons Attribution-Share Alike 3.0 USA License. - **GAMERadio** - Website: http://www.hwhq.com/ - Feed: http://hwhq.com/rss.xml - - Licence: + - Copyright: - **GNU World Order Linux Cast** - Website: http://www.gnuworldorder.info - Feed: https://gnuworldorder.info/ogg.xml - - Licence: + - Copyright: - **GNU/Linux RTM** - Website: http://gnulinuxrtm.blogspot.com/ - Feed: http://feeds.feedburner.com/GNULinuxRTM - - Licence: This work is licensed under Creative Commons Attribution 4.0 + - Copyright: This work is licensed under Creative Commons Attribution 4.0 - **Geek Speak with Lyle Troxell** - Website: https://geekspeak.org/ - Feed: https://geekspeak.org/episodes/rss.xml - - Licence: Creative Commons Attribution 3.0 United States License + - Copyright: Creative Commons Attribution 3.0 United States License - **GeekNights Mondays: Science Technology Computing** - Website: http://frontrowcrew.com/geeknights/monday/ - Feed: http://feeds.feedburner.com/GNSciTech - - Licence: Creative Commons + - Copyright: Creative Commons - **Going Linux** - Website: https://goinglinux.com - Feed: http://goinglinux.com/oggpodcast.xml - - Licence: Creative Commons Attribution 4.0 International License. + - Copyright: Creative Commons Attribution 4.0 International License. - **Hacker Public Radio** - Website: http://hackerpublicradio.org/about.php - Feed: http://hackerpublicradio.org/hpr_ogg_rss.php - - Licence: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License + - Copyright: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License - **How to Fix the Internet** - Website: https://www.eff.org/how-to-fix-the-internet-podcast - Feed: https://feeds.eff.org/howtofixtheinternet - - Licence: + - Copyright: - **International Open Podcast** - Website: http://internationalopenmagazine.org/category/podcast.html - Feed: http://spielend-programmieren.at/intopenpodcast.xml - - Licence: Copyright 2015 CC-BY-SA + - Copyright: Copyright 2015 CC-BY-SA - **Internet Archive** - Website: https://archive.org/ - Feed: http://feeds.feedburner.com/archive/Lqwl - - Licence: + - Copyright: - **Knightwise.com Audio Feed.** - Website: https://knightwise.com - Feed: http://feeds.feedburner.com/knightcastpodcast - - Licence: Creative commons apply ! Non commercial re-use is allowed. + - Copyright: Creative commons apply ! Non commercial re-use is allowed. - **LQ Radio** - Website: http://radio.linuxquestions.org - Feed: http://feeds.feedburner.com/linuxquestions/LQRadioALL-ogg - - Licence: + - Copyright: - **LaGER: GNU/Linux and Games/Entertainment Radio** - Website: http://thelinuxlink.net/lager - Feed: http://feeds.feedburner.com/thelinuxlink/Paek - - Licence: Creative Commons License Some Rights Reserved + - Copyright: Creative Commons License Some Rights Reserved - **Late Night Linux (Ogg)** - Website: https://latenightlinux.com - Feed: http://latenightlinux.com/feed/ogg - - Licence: + - Copyright: - **Libre Lounge** - Website: https://librelounge.org - Feed: https://librelounge.org/rss-feed.rss - - Licence: Licensed under CC BY-SA 4.0 International + - Copyright: Licensed under CC BY-SA 4.0 International - **Line Noise Podcast** - Website: https://www.eff.org/rss/podcast/mp3.xml - Feed: http://www.eff.org/rss/podcast/mp3.xml - - Licence: + - Copyright: - **Linux After Dark** - Website: https://linuxafterdark.net - Feed: https://linuxafterdark.net/feed/podcast - - Licence: + - Copyright: - **Linux Downtime** - Website: https://linuxdowntime.com - Feed: https://latenightlinux.com/feed/extra - - Licence: + - Copyright: - **Linux Game Cast** - Website: https://linuxgamecast.com - Feed: https://linuxgamecast.com/feed/ - - Licence: + - Copyright: - **Linux Game Cast** - Website: https://linuxgamecast.com - Feed: http://feeds.feedburner.com/LinuxgamecastWeeklyMp3 - - Licence: CC BY-SA LinuxGameCast LLP 2022 + - Copyright: CC BY-SA LinuxGameCast LLP 2022 - **Linux In Da House MP3 Feed** - Website: http://linuxindahouse.com - Feed: http://linuxindahouse.com/linuxindahouse_mp3.rss - - Licence: Creative Commons License Some Rights Reserved + - Copyright: Creative Commons License Some Rights Reserved - **Linux Inlaws** - Website: https://linuxinlaws.eu - Feed: https://linuxinlaws.eu/inlaws_rss.xml - - Licence: Linux Inlaws (c) 2020 CC-BY-SA + - Copyright: Linux Inlaws (c) 2020 CC-BY-SA - **Linux Lads** - Website: https://linuxlads.com - Feed: https://linuxlads.com/feed_ogg.rss - - Licence: Released under the Creative Commons Attribution-Share Alike 3.0 Unported Licence + - Copyright: Released under the Creative Commons Attribution-Share Alike 3.0 Unported Licence - **Linux Outlaws** - Website: http://sixgun.org - Feed: http://feeds.feedburner.com/linuxoutlaws - - Licence: Copyright © 2007-2012 Sixgun Productions http://creativecommons.org/licenses/by-sa/3.0/ + - Copyright: Copyright © 2007-2012 Sixgun Productions http://creativecommons.org/licenses/by-sa/3.0/ - **Linux Reality Podcast (MP3 Feed)** - Website: http://www.linuxreality.com - Feed: http://feeds.feedburner.com/linuxreality - - Licence: Linux Reality is released under a Attribution-Noncommercial-No Derivative Works 3.0 United States licence. + - Copyright: Linux Reality is released under a Attribution-Noncommercial-No Derivative Works 3.0 United States licence. - **Linux Trivia Podcast** - Website: http://setbit.org/lt.html - Feed: http://setbit.org/lt-ogg.xml - - Licence: Creative Commons License Some Rights Reserved + - Copyright: Creative Commons License Some Rights Reserved + +- **Linux User Space** + - Website: https://www.linuxuserspace.show + - Feed: https://www.linuxuserspace.show/rss + - Copyright: © 2023 Dan Simmons & Leo Chavez - **Linux at Work** - Website: https://www.linuxatwork.org - Feed: http://feeds.podtrac.com/mBdfP0QTX0iY - - Licence: CC BY 4.0 + - Copyright: CC BY 4.0 - **Linux in the Ham Shack** - Website: https://lhspodcast.info/category/podcast-mp3/ - Feed: http://lhspodcast.info/category/podcast-mp3/feed/ - - Licence: CC-BY-NC-4.0 + - Copyright: CC-BY-NC-4.0 - **Linux in the Ham Shack (OGG Feed)** - Website: https://lhspodcast.info/category/podcast-ogg/ - Feed: https://lhspodcast.info/category/podcast-ogg/feed/ - - Licence: Attribution-NonCommercial-NoDerivatives 4.0 International + - Copyright: Attribution-NonCommercial-NoDerivatives 4.0 International - **Linuxlugcast** - Website: https://linuxlugcast.com - Feed: http://feeds.feedburner.com/linuxlugcast-ogg - - Licence: Creative commons Attribution 4.0 International (CC BY 4.0) + - Copyright: Creative commons Attribution 4.0 International (CC BY 4.0) - **Linuxlugcast** - Website: https://linuxlugcast.com - Feed: http://feeds.feedburner.com/linuxlugcast/dBDY - - Licence: Creative commons Attribution 4.0 International (CC BY 4.0) + - Copyright: Creative commons Attribution 4.0 International (CC BY 4.0) - **LugRadio (high-quality ogg)** - Website: http://www.lugradio.org/episodes.ogg.rss - Feed: http://www.lugradio.org/episodes.ogg.rss - - Licence: LUGRadio is released under a Creative Commons Attribution + - Copyright: LUGRadio is released under a Creative Commons Attribution NonCommercial NoDerivs licence. - **Makers Corner, with Nate and Yannick** - Website: https://makerscorner.tech - Feed: https://makerscorner.tech/feed/podcast/ - - Licence: Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license. + - Copyright: Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license. - **OGG – mintCast** - Website: https://mintcast.org - Feed: https://mintcast.org/category/ogg/feed/ - - Licence: + - Copyright: - **OggcastSoftware Freedom Law Center** - Website: http://www.softwarefreedom.org/podcast/http://www.softwarefreedom.org/ - Feed: http://www.softwarefreedom.org/feeds/podcast-mp3/ - - Licence: 2008, 2009, 2010, 2011, Software Freedom Law Center. Licensed under a Creative Commons Attribution-No Derivative Works 3.0 United States License. + - Copyright: 2008, 2009, 2010, 2011, Software Freedom Law Center. Licensed under a Creative Commons Attribution-No Derivative Works 3.0 United States License. - **Open Minds … from Creative Commons** - Website: https://anchor.fm/creativecommons - Feed: https://anchor.fm/s/4d70d828/podcast/rss - - Licence: Creative Commons + - Copyright: Creative Commons - **Open Source Security Podcast** - Website: http://opensourcesecuritypodcast.com - Feed: https://opensourcesecuritypodcast.libsyn.com/rss - - Licence: This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + - Copyright: This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. - **PodCastle** - Website: https://podcastle.org/ - Feed: http://podcastle.org/feed/ - - Licence: + - Copyright: - **Podcast Ubuntu Portugal** - Website: https://podcastubuntuportugal.org/ - Feed: https://podcastubuntuportugal.org/feed/podcast/ - - Licence: Este trabalho está licenciado com uma Licença Creative Commons - Atribuição 4.0 Internacional - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: Este trabalho está licenciado com uma Licença Creative Commons - Atribuição 4.0 Internacional - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **Podcast – Cory Doctorow's craphound.com** - Website: https://craphound.com - Feed: http://feeds.feedburner.com/doctorow_podcast - - Licence: Creative Commons by-nc-sa http://creativecommons.org/licenses/by-nc-sa/2.5/ + - Copyright: Creative Commons by-nc-sa http://creativecommons.org/licenses/by-nc-sa/2.5/ - **Podcast – Launchpad blog** - Website: https://blog.launchpad.net - Feed: http://news.launchpad.net/category/podcast/feed - - Licence: + - Copyright: - **PseudoPod** - Website: https://pseudopod.org - Feed: http://pseudopod.org/feed/ - - Licence: + - Copyright: - **RadioTux** - Website: https://www.radiotux.de/ - Feed: http://radiotux.de/podcast/rss/radiotux-all.xml - - Licence: © Creative Commons - BY-SA 3.0 Unported + - Copyright: © Creative Commons - BY-SA 3.0 Unported - **RatholeRadio.org (Ogg Version)** - Website: https://ratholeradio.org - Feed: http://feeds.feedburner.com/RatholeRadio-ogg - - Licence: Creative Commons BY-SA Licensed + - Copyright: Creative Commons BY-SA Licensed + +- **Science for the People** + - Website: http://www.scienceforthepeople.ca/ + - Feed: http://feeds.feedburner.com/SkepticallySpeaking + - Copyright: Copyright now Science for the People - **Security Now (Audio)** - Website: https://twit.tv/shows/security-now - Feed: http://feeds.twit.tv/sn.xml - - Licence: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **Skepticule** - Website: http://www.skepticule.co.uk/ - Feed: http://www.skepticule.co.uk/feeds/posts/default?alt=rss - - Licence: Creative Commons Attribution-NonCommercial-No Derivative Works 2.0 UK: England & Wales + - Copyright: Creative Commons Attribution-NonCommercial-No Derivative Works 2.0 UK: England & Wales - **Software Freedom Podcast** - Website: https://fsfe.org/news/podcast - Feed: http://fsfe.org/news/podcast.en.rss - - Licence: Copyright (c) Free Software Foundation Europe. Creative Commons BY-SA 4.0 + - Copyright: Copyright (c) Free Software Foundation Europe. Creative Commons BY-SA 4.0 - **Software Freedom Podcast** - Website: https://fsfe.org/news/podcast - Feed: http://fsfe.org/news/podcast-opus.en.rss - - Licence: Copyright (c) Free Software Foundation Europe. Creative Commons BY-SA 4.0 + - Copyright: Copyright (c) Free Software Foundation Europe. Creative Commons BY-SA 4.0 - **Tea, Earl Grey, Hot !** - Website: https://teaearlgreyhot.org/ - Feed: https://teaearlgreyhot.org/feed/podcast - - Licence: Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license. + - Copyright: Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license. - **The Big Slurp** - Website: https://thelovebug.org/series/slurp/ - Feed: https://thelovebug.org/feed/podcast/slurp - - Licence: CC BY-NC-SA 4.0 Attribution-NonCommercial-ShareAlike 4.0 International + - Copyright: CC BY-NC-SA 4.0 Attribution-NonCommercial-ShareAlike 4.0 International - **The Binary Times Audiocast - ogg** - Website: https://www.thebinarytimes.net - Feed: https://www.thebinarytimes.net/rss-ogg.xml - - Licence: Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license. + - Copyright: Unless otherwise stated, this podcast is released under a Creative Commons, By Attribution, Share Alike license. - **The Bugcast - Ogg Feed** - Website: https://thebugcast.org/ - Feed: http://thebugcast.org/feed/ogg/ - - Licence: + - Copyright: - **The Dub Zone** - Website: http://petecogle.co.uk/category/the-dub-zone/ - Feed: http://feeds.feedburner.com/TheDubZone - - Licence: Creative Commons + - Copyright: Creative Commons - **The Duffercast in Ogg Vorbis** - Website: https://duffercast.org/ - Feed: http://duffercast.org/feed/podcast/ - - Licence: + - Copyright: - **The Full Circle Weekly News** - Website: https://fullcirclemagazine.org/ - Feed: https://fullcirclemagazine.org/feed/podcast - - Licence: CC-SA 2016-present, Full Circle Magazine + - Copyright: CC-SA 2016-present, Full Circle Magazine - **The Jodcast (high bandwidth)** - Website: http://www.jodcast.net/ - Feed: http://www.jodcast.net/rss-high.xml - - Licence: Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 England & Wales Licence + - Copyright: Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 England & Wales Licence - **The Linux Action Show! OGG** - Website: http://www.jupiterbroadcasting.com - Feed: http://feeds2.feedburner.com/TheLinuxActionShowOGG - - Licence: + - Copyright: - **The Linux Cast** - Website: https://thelinuxcast.org/ - Feed: https://thelinuxcast.org/feed/feed.xml - - Licence: + - Copyright: - **The Linux Link Tech Show Ogg-Vorbis Feed** - Website: http://www.tllts.org - Feed: http://feeds.feedburner.com/TheLinuxLinkTechShowOgg-vorbisFeed - - Licence: TLLTS is licensed under Creative Commons License for Non-Commercial Use + - Copyright: TLLTS is licensed under Creative Commons License for Non-Commercial Use - **The Linux Link Tech Show Ogg-Vorbis Feed** - Website: http://www.tllts.org - Feed: http://www.thelinuxlink.net/tllts/tllts_ogg.rss - - Licence: TLLTS is licensed under Creative Commons License for Non-Commercial Use + - Copyright: TLLTS is licensed under Creative Commons License for Non-Commercial Use - **This Week in Computer Hardware (Audio)** - Website: https://twit.tv/shows/this-week-in-computer-hardware - Feed: http://feeds.twit.tv/twich.xml - - Licence: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **This Week in Google (Audio)** - Website: https://twit.tv/shows/this-week-in-google - Feed: http://feeds.twit.tv/twig.xml - - Licence: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **This Week in Microbiology** - Website: http://www.asm.org/twim/ - Feed: http://feeds.feedburner.com/twim - - Licence: Creative Commons Attribution - Noncommercial + - Copyright: Creative Commons Attribution - Noncommercial - **This Week in Tech (Audio)** - Website: https://twit.tv/shows/this-week-in-tech - Feed: http://feeds.twit.tv/twit.xml - - Licence: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ + - Copyright: This work is licensed under a Creative Commons License - Attribution-NonCommercial-NoDerivatives 4.0 International - http://creativecommons.org/licenses/by-nc-nd/4.0/ - **TuxJam OGG** - Website: https://tuxjam.otherside.network/ - Feed: https://tuxjam.otherside.network/?feed=podcast - - Licence: Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + - Copyright: Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) - **Ubuntu Podcast** - Website: https://ubuntupodcast.org - Feed: http://ubuntupodcast.org/feed/ - - Licence: + - Copyright: - **Ubuntu Podcast** - Website: https://ubuntupodcast.org - Feed: http://feed.ubuntupodcast.org/mp3 - - Licence: Copyright Ubuntu Podcast Team. Some rights reserved. This audio is released under a Creative Commons Attribution-Share Alike license. + - Copyright: Copyright Ubuntu Podcast Team. Some rights reserved. This audio is released under a Creative Commons Attribution-Share Alike license. - **Wikipediapodden** - Website: http://wikipediapodden.se/prenumerera/ - Feed: http://wikipediapodden.se/feed/podcast/ - - Licence: CC BY-SA 4.0 Wikipediapodden + - Copyright: CC BY-SA 4.0 Wikipediapodden - **bsdtalk** - Website: http://bsdtalk.blogspot.com/ - Feed: http://feeds.feedburner.com/Bsdtalk - - Licence: + - Copyright: - **podcast – Full Circle Magazine** - Website: https://fullcirclemagazine.org - Feed: http://fullcirclemagazine.org/category/podcast/feed/ - - Licence: + - Copyright: - **urandom podcast** - Website: https://urandom-podcast.info/ - Feed: http://feeds.feedburner.com/urandom-podcast/ogg - - Licence: + - Copyright: diff --git a/feedWatcher.opml b/feedWatcher.opml index 03c5546..7e866ce 100644 --- a/feedWatcher.opml +++ b/feedWatcher.opml @@ -2,8 +2,8 @@ <opml version="1.1"> <head> <title>Free Culture Podcasts -2023-01-11 09:44:06 -2023-01-11 09:44:06 +2023-01-14 23:09:26 +2023-01-14 23:09:26 @@ -14,6 +14,7 @@ + @@ -59,6 +60,7 @@ + @@ -77,6 +79,7 @@ + diff --git a/feedWatcher.pdf b/feedWatcher.pdf index 6a025f0..ed3bb4a 100644 Binary files a/feedWatcher.pdf and b/feedWatcher.pdf differ diff --git a/feedWatcher_3.tpl b/feedWatcher_3.tpl index 200e38b..c3471dc 100644 --- a/feedWatcher_3.tpl +++ b/feedWatcher_3.tpl @@ -10,7 +10,7 @@ - **[% feeds.$i.urls_title %]** - Website: [% feeds.$i.urls_link %] - Feed: [% feeds.$i.urls_url %] - - Licence: [% feeds.$i.urls_copyright %] + - Copyright: [% feeds.$i.urls_copyright %] [% i = i + 1 -%] [% END -%] diff --git a/feedWatcher_5.tpl b/feedWatcher_5.tpl index 3d6d127..983ea53 100644 --- a/feedWatcher_5.tpl +++ b/feedWatcher_5.tpl @@ -1,4 +1,5 @@ [%# feedWatcher_5.tpl 2022-11-21 -%] +[%# Lists all the URLs in the system, useful for dumping everything -%] [% IF feeds.size > 0 -%] [% i = 0 -%] [% WHILE i < feeds.size -%] diff --git a/feedWatcher_schema.sql b/feedWatcher_schema.sql index 17a55d0..92ff79f 100644 --- a/feedWatcher_schema.sql +++ b/feedWatcher_schema.sql @@ -29,6 +29,8 @@ CREATE TABLE urls ( link varchar(1024), image varchar(1024), copyright varchar(80), + check_type varchar(10) DEFAULT 'none', + reason_accepted text, generator varchar(80), language varchar(40), parent_id integer @@ -131,6 +133,8 @@ CREATE VIEW all_episodes AS urls.link as urls_link, urls.image as urls_image, urls.copyright as urls_copyright, + urls.check_type as urls_check_type, + urls.reason_accepted as urls_reason_accepted, urls.generator as urls_generator, urls.language as urls_language, urls.parent_id as urls_parent_id,