RSS Reader viết bằng Python Flask
Python
61
Flask
3
White

Vu Nhat Minh viết ngày 02/11/2015

Tại sao lại là RSS Reader ?

Tháng 7 năm 2013, Google chính thức khai tử dịch vụ Google RSS Reader. Nhân dịp đó công ty mình có tổ chức một buổi hackathon, chủ đề là viết một RSS Reader bằng một ngôn ngữ bất kỳ với phần thưởng khoảng 500$. Lần đó mình đã giành được phần thưởng, vì thế chia sẻ luôn source code của chương trình viết trong buổi hackathon đó.

PyRSSReader

Chường trình được đặt tên là PyRSSReader, viết bằng Flask và deploy trên Heroku. Dưới đây là source và demo

alt text

Flask là một micro web framework khá nổi tiếng trong 2-3 năm gần đây, hồi năm 2013 khi mình viết chương trình này thì hệ sinh thái cái Flask đã rất hoàn chỉnh. Bên trong Flask có Werkzeug (WSGI library) , Jinja2 (template engine), hỗ trợ ORM, routing đầy đủ. Để xây dựng chương trình thì bước đầu mình làm theo Quick start guide của trang chủ và bài viết cấu trúc một app lớn của Mitsuhiko.

Nếu nói sâu hơn một chút nữa về PyRSSReader thì còn có Twitter Bootstrap làm front-end, SQLAlchemy/SQLlite cho database và Feed parser làm parse engine.

Toàn bộ các thư viện sử dụng có thể được xem ở file requirement.txt

Flask==0.10
Flask-OAuth==0.12
Flask-SQLAlchemy==0.16
Flask-WTF==0.8.2
Jinja2==2.6
SQLAlchemy==0.8.0
WTForms==1.0.3
Werkzeug==0.8.3
distribute==0.6.31
facepy==0.8.4
feedparser==5.1.3
httplib2==0.7.7
oauth2==1.5.211
pysqlite==2.6.3
requests==1.1.0
tweepy==2.0
wsgiref==0.1.2

Ở đây có một số thư viện không cần thiết cho một minimum app là Flask-OAuth, facepy, tweepy. Lúc viết chương trình thì có tham vọng làm cả phần login bằng các mạng xã hội, nhưng với thời gian của một buổi Hackathon thì đã hơi quá sức nên tính năng vẫn chưa hoàn chỉnh.

Những tính năng cơ bản của một RSSReader thì đã hoàn thành, gồm có: Submit một link RSS, xem các bài viết bên trong, star những bài viết thấy hay và xem cả những bài viết đang trend. Bạn có thể nghịch cái app trên Heroku để xem chi tiết :D

Cách clone và build

Nếu bạn có hứng thú fork và hack source thì hãy làm theo hướng dẫn ở các bước dưới đây

  • Bạn cần Python 2.6+
  • Bạn cần pip
  • Cài đặt virtualenv

    $ sudo pip install virtualenv
    
  • Clone repo từ Github và install hết các thư viện phụ thuộc trong virtualenv

    $ git clone git@github.com:DTVD/PyRSSReader.git
    $ cd PyRSSReader
    $ virtualenv venv
    $ source venv/bin/active
    $ pip install -r requirements.txt
    
  • Tạo database

    $ python shell.py
    >>> db.create_all()
    

    Sau khi đánh xong câu lệnh trên thì một file app.db sẽ được tạo mới theo cấu trúc định nghĩa sẵn. Bạn có thể kiểm tra các bảng vừa được tạo mới

    $ sqlite3 app.db
    SQLite version 3.7.13 2012-07-17 17:46:21
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> .tables
    facebook  feed      feeduser  star      twitter   user
    sqlite>
    
  • Bật webserver ở local lên

    $ python run.py
    * Running on http://0.0.0.0:5000/
    * Restarting with reloader
    
  • Cuối cùng, mở browser ở địa chỉ 127.0.0.1:5000 lên và test :D

Deploy một Flask app lên Heroku

Phần này hơi chi tiết và có một số lưu ý, nên mình sẽ viết riêng ở một bài viết khác. Khi làm thì mình tham khảo Hướng dẫn chính thức của Heroku

Happy hacking !

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Vu Nhat Minh

56 bài viết.
922 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
141 32
Nếu bạn thường vào trang mua sắm của amazon, chắc sẽ chẳng lạ gì với menu Shop by Department. Tốc độ hiển thị nội dung của menu là tức thì so với d...
Vu Nhat Minh viết gần 5 năm trước
141 32
White
111 4
Lời người dịch Người dịch là một developer , sau khi tìm đọc được bài viết này bằng bản gốc tiếng Anh đã cảm thấy như được "khai sáng" về khả năng...
Vu Nhat Minh viết gần 5 năm trước
111 4
White
76 7
Form là thành phần quan trọng nhất khi design flow đăng ký của 1 web hay 1 app, dù là view gồm nhiều bước hay chỉ là một màn hình đơn điệu. Bài này...
Vu Nhat Minh viết hơn 3 năm trước
76 7
Bài viết liên quan
White
7 4
Description Mình là một thằng thích đọc sách. Nhưng lúc nào cũng bận (lười) nên cũng mấy tháng rồi chưa hoàn thành được quyển sách nào. Mình đa số...
Rice viết hơn 1 năm trước
7 4
White
1 0
Web Framework Flask định nghĩa route bằng annotations kiểu như @route('/users/add', methods='GET']) def user_add(): pass Lợi thế của cách là...
studybot viết hơn 4 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
56 bài viết.
922 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!