Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
rss-email
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Murukesh Mohanan
rss-email
Commits
28efa45b
Commit
28efa45b
authored
Aug 05, 2015
by
Murukesh Mohanan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
initial commit
parents
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
0 deletions
+85
-0
.gitignore
.gitignore
+3
-0
rss-email.py
rss-email.py
+71
-0
rssemailconfig.example.py
rssemailconfig.example.py
+11
-0
No files found.
.gitignore
0 → 100644
View file @
28efa45b
rssemailconfig.py
*.pyc
*.pyo
rss-email.py
0 → 100755
View file @
28efa45b
#! /usr/bin/env python3
import
os
import
sys
import
subprocess
import
feedparser
import
pickle
from
smtplib
import
SMTP
from
email.mime.multipart
import
MIMEMultipart
from
email.mime.text
import
MIMEText
from
bs4
import
BeautifulSoup
feed
=
{
'file'
:
'feed.pickle'
}
mail
=
{
'from'
:
'Murukesh Mohanan <murukesh@cse.iitb.ac.in>'
}
smtp
=
{}
old_entries
=
set
()
from
rssemailconfig
import
*
def
get_new_posts
():
current_entries
=
feedparser
.
parse
(
subprocess
.
Popen
([
'curl'
,
'-u'
,
':'
.
join
(
feed
[
'creds'
]),
feed
[
'url'
]],
stdout
=
subprocess
.
PIPE
)
.
communicate
()[
0
])
.
entries
post_ids
=
[
post
.
id
for
post
in
current_entries
]
try
:
old_entries
=
pickle
.
load
(
open
(
feed
[
'file'
],
'br'
))
except
(
EOFError
,
FileNotFoundError
):
old_entries
=
set
()
new_post_ids
=
set
(
id
for
id
in
post_ids
if
id
not
in
old_entries
)
new_posts
=
[
post
for
post
in
current_entries
if
post
.
id
in
new_post_ids
]
return
new_posts
def
convert_post_to_email
(
post
):
msg
=
MIMEMultipart
(
'alternative'
)
msg
[
'Subject'
]
=
mail
[
'prefix'
]
+
post
.
title
msg
[
'From'
]
=
mail
[
'from'
]
msg
[
'To'
]
=
mail
[
'to'
]
part1
=
MIMEText
(
BeautifulSoup
(
post
[
'summary'
])
.
get_text
(),
'plain'
)
html_email
=
post
[
'summary'
]
+
'<br><hr><a target="_blank" href="'
+
post
[
'id'
]
+
'">'
+
post
[
'id'
]
+
'</a>'
part2
=
MIMEText
(
html_email
,
'html'
)
msg
.
attach
(
part1
)
msg
.
attach
(
part2
)
return
msg
def
mail_feed
(
feed
):
smtp
=
SMTP
(
smtp_url
)
smtp
.
starttls
()
smtp
.
login
(
*
smtp_creds
)
bad_posts
=
set
()
for
post
in
feed
:
msg
=
convert_post_to_email
(
post
)
try
:
smtp
.
send_message
(
msg
)
except
:
bad_posts
.
add
(
post
.
id
)
return
bad_posts
def
save_sent_posts
(
feed
,
bad_posts
):
old_entries
.
update
(
post
.
id
for
post
in
feed
if
post
.
id
not
in
bad_posts
)
with
open
(
feed_file
,
'bw'
)
as
f
:
pickle
.
dump
(
old_entries
,
f
)
return
if
__name__
==
"__main__"
:
new_posts
=
get_new_posts
()
if
len
(
new_posts
)
==
0
:
print
(
"No new posts."
)
sys
.
exit
(
0
)
bad_posts
=
mail_feed
(
new_posts
)
save_sent_posts
(
new_posts
,
bad_posts
)
rssemailconfig.example.py
0 → 100644
View file @
28efa45b
feed
[
'url'
]
=
'http://placements.iitb.ac.in/blog/?feed=rss2'
feed
[
'name'
]
=
'IITB Placement Blog'
feed
[
'creds'
]
=
[
'murukesh'
,
'password'
]
feed
[
'file'
]
=
'feed.pickle'
smtp
[
'url'
]
=
'smtp-auth.iitb.ac.in'
smtp
[
'creds'
]
=
[
'murukesh'
,
'password'
]
mail
[
'to'
]
=
'murukesh.mohanan@gmail.com'
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment