Your own daily dose … (of the news)

  1. Below is a general recipe for experimenting with RSS feeds AND speech synthesizers.
  2. For the speech synthesis there are two scripts, very similar, one will work with ESPEAK (free open source), the other works with Microsoft SAPI.
  3. In order to run these scripts you will need MYSQL installed. You will need a minimum level of understanding of how MYSQL works. You can easily translate the database piece to ODBC, and the rest to PowerShell or whatever. That’s your business, not mine.
  4. Once you’ve installed MYSQL and the server is running, create a database called “NEWS”: create database NEWS;
  5. After you’ve created the NEWS database, using the CLI (command line interface) as above, type command: use NEWS;
  6. Once you are in the NEWS database, copy and paste the entire script below into the CLI or save as text file and consult from the CLI using the command: source rss.sql (assuming you stored the create table text below in that file)
  7. In the example I’m using the ROOT database, why? – because IDGAF. But best practice is to create special database users with limited permissions. If you’ve installed your MYSQL database without granting permission to external (port) connections? – then it’s not a concern.
  8. Running the aggregator might trigger a site to block you or even your own network. This behavior, which was innocuous 20 years ago, is now attacked and classified as an aggressive network behavior. Just be careful.
  9. After you’ve run the aggregation script (and the script can be run by CRON or Task Manager daily or hourly if you like), then you can run one of the speech synthesis apps, reading headlines.
  10. If you have a compatible shortwave radio, with upper and lower side band, and a LINUX computer running JS8 Call with appropriate libraries for CAT control? – then look into this and you can set up a headline service over shortwave: https://planetarystatusreport.com/?p=7432

Have fun getting your daily dose of the fucking news.

Create Table Script for RSS Database

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

CREATE TABLE `RSS` (
`ID` bigint(20) NOT NULL,
`SOURCE` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`LINK` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`TITLE` varchar(400) COLLATE utf8_unicode_ci NOT NULL,
`PUBLISHED` datetime NOT NULL,
`ARTICLE` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `RSS`
ADD PRIMARY KEY (`ID`),
ADD UNIQUE KEY `unique_link` (`LINK`);

ALTER TABLE `RSS`
MODIFY `ID` bigint(20) NOT NULL AUTO_INCREMENT;
COMMIT;

Python Script for Aggregating RSS Feeds and storing stories locally

from __future__ import print_function

import os
import feedparser
import os.path, time
import json
import math
import time
import urllib.parse as pr
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup as BS
from requests import get
from os.path import exists
from socket import socket, AF_INET, SOCK_STREAM
from decimal import Decimal
from datetime import datetime, date, timedelta
from anyascii import anyascii
import mysql.connector

usern = "root"
passw = "password"
dbn = "NEWS"
servern = "localhost"
portn = 3306

newsServiceM3 = "ZEROHEDGE"

retHeadlines = 4

newsMode = 3

bigSleep = 90

def GetArt(number):
# Connect with the MySQL Server
cnx = mysql.connector.connect(user=usern, database=dbn, password=passw, host=servern, port=portn)
qry = "select ARTICLE, SOURCE, LINK from RSS where ID = %s" % (number)
cur = cnx.cursor(buffered=True)
cur.execute(qry)
retRes = cur.fetchall()
cnx.close()
return retRes[0]

def GetTopHourly(source):
# Connect with the MySQL Server
cnx = mysql.connector.connect(user=usern, database=dbn, password=passw, host=servern, port=portn)
qry = "select ID, TITLE, PUBLISHED, SOURCE, length(ARTICLE) as LOF from RSS where SOURCE = '%s' order by PUBLISHED desc limit 1" % source
cur = cnx.cursor(buffered=True)
cur.execute(qry)
retRes = cur.fetchall()
cnx.close()
return retRes

def GetTop(source, number):
# Connect with the MySQL Server
cnx = mysql.connector.connect(user=usern, database=dbn, password=passw, host=servern, port=portn)
qry = "select ID, TITLE, PUBLISHED, SOURCE, length(ARTICLE) as LOF from RSS where SOURCE = '%s' order by PUBLISHED desc limit %s" % (source, number)
cur = cnx.cursor(buffered=True)
cur.execute(qry)
retRes = cur.fetchall()
cnx.close()
return retRes

def AlreadySaved(link):
# Connect with the MySQL Server
cnx = mysql.connector.connect(user=usern, database=dbn, password=passw, host=servern, port=portn)
qry = "select ID from RSS where LINK = '" + link + "'"
cur = cnx.cursor(buffered=True)
cur.execute(qry)
cur.fetchall()
rc = cur.rowcount
cnx.close()
if rc > 0:
return True
else:
return False

def SaveRSS(source, title, link, published, article):

tit = title.replace("'", "''")

clean_text = anyascii(article)

art = str(clean_text)

art = art.replace("'", "''")

if len(art) > 5000:
art = art[0:5000]

cnx = mysql.connector.connect(user=usern, database=dbn, password=passw, host=servern, port=portn)

cur = cnx.cursor()

qry = """
INSERT INTO RSS
(SOURCE,
LINK,
TITLE,
PUBLISHED,
ARTICLE)
VALUES
(%s,%s,%s,%s,%s)
"""

val = (source, link, tit, published, art)

cur.execute(qry, val)

cnx.commit()

cnx.close()

def GrabRSS(RssURL, SourceName):

hdrs = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}

NewsFeed = feedparser.parse(RssURL)

for na in NewsFeed.entries:

try:
print(na.title)
print(na.link)
print(na.published)
print(na.published_parsed)
except:
continue

if AlreadySaved(na.link):
continue

print("*************************")

response = get(na.link, None, headers=hdrs)

print(na.keys())

soup = BS(response.content, 'html.parser')

txtChunk = ""

for data in soup.find_all("p"):
txtval = data.get_text()
txtval = txtval.strip()
txtarr = txtval.split()

if len(txtarr) == 1:
continue

if "posted" in txtval and ("hours" in txtval or "days" in txtval) and len(txtarr) == 4:
continue

if txtval == "No Search Results Found":
continue

if txtval == "Terms of Service":
continue

if txtval == "Advertise with us":
continue

if txtval == "Media Inquiries":
continue

txtChunk += " " + txtval + "\n"

tyr = na.published_parsed[0]
tmn = na.published_parsed[1]
tdy = na.published_parsed[2]
thr = na.published_parsed[3]
tmi = na.published_parsed[4]
tsc = na.published_parsed[5]

ptms = "%s-%s-%s %s:%s:%s" % (tyr, tmn, tdy, thr, tmi, tsc)

SaveRSS(SourceName, na.title, na.link, ptms, txtChunk.strip())

print(txtChunk.strip())

def debugHere():
input("Press enter to continue ...")

def clearConsole():
command = 'clear'
if os.name in ('nt', 'dos'): # If Machine is running on Windows, use cls
command = 'cls'
os.system(command)

def CycleFeeds():
infowars = "https://www.infowars.com/rss.xml"
zh = "https://feeds.feedburner.com/zerohedge/feed"
yahoo = "https://news.yahoo.com/rss/"
cnn = "http://rss.cnn.com/rss/cnn_topstories.rss"
bbc = "http://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml"
nyt = "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
onion = "https://www.theonion.com/rss"
bb = "https://babylonbee.com/feed"
print("Grabbing Babylon Bee ...")
GrabRSS(bb, "BB")
print("Grabbing ONION ...")
GrabRSS(onion, "ONION")
print("Grabbing INFOWARS ...")
GrabRSS(infowars, "INFOWARS")
print("Grabbing ZEROHEDGE ...")
GrabRSS(zh, "ZEROHEDGE")
#print("Grabbing YAHOO ...")
#GrabRSS(yahoo, "YAHOO")
print("Grabbing CNN ...")
GrabRSS(cnn, "CNN")
print("Grabbing BBC ...")
GrabRSS(bbc, "BBC")
print("Grabbing NYT ...")
GrabRSS(nyt, "NYT")

# FEEDS:
# 1. INFOWARS: https://www.infowars.com/rss.xml
# 2. ZEROHEDGE: https://feeds.feedburner.com/zerohedge/feed
# 3. YAHOO: https://news.yahoo.com/rss/
# 4. CNN: http://rss.cnn.com/rss/cnn_topstories.rss

time.sleep(1)

CycleFeeds()

Python Speech Synthesis Scripts

A: Windows – SAPI

#this script reads headlines from the RSS news feed
#database.

import win32com.client

speaker = win32com.client.Dispatch("SAPI.SpVoice")

import os
import time
import mysql.connector

usern = "root"
passw = "password"
dbn = "NEWS"
servern = "localhost"
portn = 3306

def TOS(text):
os.system(f"espeak -s 130 -v en+m1 '{text}'")

def GetSql(qry):
# Connect with the MySQL Server
cnx = mysql.connector.connect(user=usern, database=dbn, password=passw, host=servern, port=portn)
cur = cnx.cursor(buffered=True)
cur.execute(qry)
retRes = cur.fetchall()
cnx.close()
return retRes

#+-----------+--------------+------+-----+---------+----------------+
#| Field | Type | Null | Key | Default | Extra |
#+-----------+--------------+------+-----+---------+----------------+
#| ID | bigint(20) | NO | PRI | NULL | auto_increment |
#| SOURCE | varchar(100) | NO | | NULL | |
#| LINK | varchar(255) | NO | UNI | NULL | |
#| TITLE | varchar(400) | NO | | NULL | |
#| PUBLISHED | datetime | NO | | NULL | |
#| ARTICLE | text | NO | | NULL | |
#+-----------+--------------+------+-----+---------+----------------+

qry1 = "select SOURCE, TITLE from RSS where PUBLISHED > curdate()-1 order by PUBLISHED desc;"

res = GetSql(qry1)

for rec in res:
src = rec[0]
tit = rec[1].replace("''", "")
print(src + ": " + tit)

phrase = "From " + src + ", HEAD LINE, " + tit

speaker.Speak(phrase)

time.sleep(2)

B: Linux – ESPEAK

import os
import time
import mysql.connector

usern = "root"
passw = "password"
dbn = "NEWS"
servern = "localhost"
portn = 3306

def TOS(text):
os.system(f"espeak -s 130 -v en+m1 '{text}'")

def GetSql(qry):
# Connect with the MySQL Server
cnx = mysql.connector.connect(user=usern, database=dbn, password=passw, host=servern, port=portn)
cur = cnx.cursor(buffered=True)
cur.execute(qry)
retRes = cur.fetchall()
cnx.close()
return retRes

#+-----------+--------------+------+-----+---------+----------------+
#| Field | Type | Null | Key | Default | Extra |
#+-----------+--------------+------+-----+---------+----------------+
#| ID | bigint(20) | NO | PRI | NULL | auto_increment |
#| SOURCE | varchar(100) | NO | | NULL | |
#| LINK | varchar(255) | NO | UNI | NULL | |
#| TITLE | varchar(400) | NO | | NULL | |
#| PUBLISHED | datetime | NO | | NULL | |
#| ARTICLE | text | NO | | NULL | |
#+-----------+--------------+------+-----+---------+----------------+

qry1 = "select SOURCE, TITLE from RSS where PUBLISHED > curdate()-1 order by PUBLISHED desc;"

res = GetSql(qry1)

for rec in res:
src = rec[0]
tit = rec[1].replace("''", "")
print(src + ": " + tit)
phrase = "From " + src + ", HEAD LINE, " + tit
TOS(phrase)
time.sleep(0.5)

DALEKS …

“You do understand that you are watching your neighbors slowly become Daleks?” – Dr. Freckles

  1. ear buds
  2. vr goggles
  3. wearing them all the time
  4. wtaf

THRILL SEEKER?

“Thrill seeker? – the thrills seek YOU on planet Boblimptock, that’s why hermits live in caves, that’s why it doesn’t matter where you live.” – Dr. Freckles

“Thrill seeker? – the thrills seek YOU.” – Dr. Freckles

FEMA …

Link: https://nypost.com/2024/10/04/us-news/fema-accused-of-not-giving-staff-orders-seizing-aid-stalling-starlink-deliveries-to-hurricane-helene-victims/

  1. many angles to this story
  2. conservative case: this is another example of collapse, the inability to properly respond to an emergency … and it’s not new … remember Katrina? Or more recent, Maui?
  3. this might be an example of the use of geoengineering to target a community with an inland hurricane – in order to extract rare earths or other precious materials from the hills
  4. the history of the FEDs treating Appalachia like shit goes back a LONG LONG TIME, at least to the end of the US Civil War. Arguably, they just don’t want potential rebels up in the woods, they want them in camps …ooops … I mean cities.

PROJECT 2025: the REAL REAL truth

Link: https://www.project2025.org/

  1. Project 2025 will outlaw FLOODING. The rain shall not fall, as in the old times of demon marshmallow hoarders and golden shower queens. Your flergous-gerg will resonate with the chiming spirit of that strange and wet bedfellow. NATURE will MOAN as TRUMP “grabs that pussy” and shows the climate how it’s done. Sure … Some will accuse him of sexual assault, but remember the turd wardens, and the lost of Florida.
  2. With this fine project, there will be HUGE GAINS in stocks and oil prices and a general shrinking of the clothing busty women are allowed to wear. Busty women, covered in skorg-powders and diamond lice, will SHINE … as the dying sun turns cold, and the old are dumped 8 miles from town, in a landfill. You can bet your PET will show up on the menu, when that printed money turns to glass, and it’s your ASS if you can’t give your woman DERG-STYLE liver spice. All the nice things will be ours, if we can just believe.
  3. MEERKAT TRAVELERS from BEYOND will arrive at our doorsteps, and they’ll find a WALL made of no-nut pancakes and armadillo bacon. The WALL will be 7 million flamingos by 33 billion Pink Floyds in size. It will be visible from Jupiter, if we build this shit RIGHT … The wall will be SO HIGH, satellites will periodically hit it, if they fly too low. You know the pervy dudes at Langley will have secret tunnels, and back channels, and underground groove chambers where Bob Sagat holds sway and it’s not okay to say NO on Taco Tuesday. Leave your troubles behind, because TRUMP and VANCE promise something lovely, come Brunkton Day.
  4. Project 2025 will partition DENMARK into 900,000 separate principalities, each with its own KING and QUEEN. Each principality will have 5 dukedoms, each dukedom will be guarded over by a robot Duke Nuke’m. As the sands of time pass, the scrubbly folk of Copenhagen will attempt to REFORM DENMARK, but the FRENCH will invade with bisque wagons and red wine torpedo sauce, and all will be LOST when the last boss botches his escape, by submarine, to Sweden. Then, in Sweden, let them drink beer from bottles, de-capping them bottles with their yellow and brown teeth, and sojourn among the gumpton-folk for 500 years. That’s also part of Project 2025.
  5. Sector guards are sharpening their kites, making hornet jelly and preparing the flames for the coming of GOOB. Last times are first times, and JUGSON will not finish his carpet prayer. We’ll see corncob chili and microwave-stripper soufflé when the scuzbit-farmers complete their sowing and the mowing time is too long away. Carnal figurines journey to Blubville, and the rains of November turn sordid and mellow. Don’t go sell your cabin yet, because it’s a sure bet the monkey pirates are down in Florida. That’s what Project 2025 will do.
  6. If this GRAND PROJECT commences we will build a time tunnel to the past. We will travel to ANCIENT ROME and lead the tired soldiers of dying empire to victory. We’ll arm our legions with AK-47s and a merciless vibe such that their enemies will run screaming for the Adriatic. Emperor Smalls will become the first BLACK ROMAN EMPEROR in the year 233 AD … if we go ahead with Project 2025.
  7. A new wind will blow from the EAST to the WEST, the best of our youth will cover themselves in sour-grass shavings and dirty Peruvian underwear. Cocaine sales will SPIKE, because Powell ain’t gonna hike rates no more, if our project moves ahead. Dingy and dark people, from greasy places, will tie our shoe laces and ravage the Bishop’s realm, and Florida Man will rise again … and all the burny spots imflamed by your jealous genital crab persuasion.
  8. Happening faster than expected, our TURNIP FACTORIES are no longer competitive. We will have INCENTIVES for making MORE TURNIPS than EVER BEFORE. All the kids will get turnip soup for breakfast, all the parents will get turnip wine while they dine. Before going to bed the adults will drink turnip whiskey, and after they wake up the turnip-coffee will be ready to go. Yeah, I bet people are afraid of Project 2025, because they are afraid of their own colon mystery.
  9. Helplessly we drift towards the sun, and the emissaries of Quadrant-BETA-5 will not go home – they hang out at the Holiday Inn, driking Fin-cleanser and WD-40. Brian Skoobs will run the new department of makeology, where stuff will get built, to do other things … for people with problems. And you’ll HAVE problems buddy … and they will fix them for GOOD! That’s what Trump will do pal, if you vote for him … you fuck.
  10. Currently there are 25 nuclear tipped missiles pointed at the State of Israel … why? – we don’t know. As part of Project 2025, we will launch all of those missiles, at Israel, as a test. A test of their (the Israeli’s) divinity and specialness, a test of dual-citizen USAF airmen and officers and their loyalty … to see if they’ll obey. We launch those missiles to make a point, that we can, and we will … and the people of Israel can and should go fuck themselves. This is Project 2025 too …
  11. When TRUMP enters office he will immediately convene a meeting of the HORGAN CHAMBER. At this meeting, Trump will declare HAWAII a “gravy land of midget mastery”, and the whole state will be turned into a giant strip club – taking advantage of naval and commercial shipping traffic, giving them “boys at sea” a place to stop, relax, get wasted, and maybe have a private “dance” or two … you judging? – Trump isn’t, ask STORMY.
  12. The core idea of Project 2025 is to REJUVENATE and CLEANSE the butt chambers of America. All of our sewage thinking and our lost protein payment plans and cash-flow scheme-dreams will become REAL, as TRUMP opens up the NATIONAL CHEESE CAVE and the dog forces of General Frosty takes all of Missouri and some of Arkansas … if we get that Project going baby … fuck it …