記事の末尾に「いい」「だめ」ボタンをつけました。

火曜日, 3月 1st, 2011 by

世間ではFacebookなどの「いいね」ボタンがすごく注目されていますが、敢えて、「いい」「だめ」ぼたんを自分で実装してみました。

何ができるの?

個別記事に以下のソースを埋めてると「いい」「だめ」ボタンが表示されます。いいの数のランキングも見れます。
※site=の後ろのxxxxを自分を識別するコードに書き換えてください。英数で適当に・・

1
2
<script>window.onload = function(){ document.getElementById("like_dislike").src="http://like-or-dislike.appspot.com/?site=xxxx&title="+encodeURI(document.title)}</script>
<IFrame id="like_dislike" style="border:none;background-color:#fff;width:180px;height:30px"></IFrame>

このブログランキングは以下のアドレスで確認できます。
http://like-or-dislike.appspot.com/?site=001

何でつくったの?

なんでつくったんだろうね。理由あげるとすると、こんなところかな。

  • いいね、だけじゃなくて、だめボタンをつけたかったから。
  • 単に実装してみたかった
  • サイト内のランキングを表示したかった
  • 外部サービスに依存したくなかった
  • 改良予定

    OAuthでログインして、自分専用のコードを発行できるようにする予定です。

    ソースコード

    おやくそくのソースコードです。まだバージョン管理してません。明日、Githubに登録するよていです。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #!/usr/bin/env python
    # -*- coding: utf-8 -*

    from google.appengine.ext import webapp, db
    from google.appengine.ext.webapp import util
    import urllib

    class MainHandler(webapp.RequestHandler):
        def get(self):
            if self.request.get('cmd'):
                page = Page.all().filter("referer =", self.request.get("referer")).get()
                if self.request.get('cmd') == "like":
                    page.like = page.like + 1
                else:
                    page.dislike = page.dislike + 1
                page.put()
                self.redirect("?done=1&referer=" + urllib.quote(self.request.get("referer")))
            elif self.request.referer:
                if self.request.get("referer"):
                    referer = self.request.get("referer")
                else:
                    referer = self.request.referer
                page = Page.all().filter("referer =", referer).get()
                if not page:
                    page = Page(referer = referer, title = self.request.get("title"), site = self.request.get("site"))
                    page.put()
                if self.request.get("done"):
                    disabled = "disabled"
                else:
                    disabled = ""
                self.response.out.write(u"""
                  <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
                  <body style="margin:0">
                  <input type="button" onclick="this.disabled = true;location.href='/?cmd=like&referer=%s'" value="いい" %s> %d : <input type="button" onclick="this.disabled = true;location.href='/?cmd=dislike&referer=%s'" value="だめ" %s> %d
                  </body></html>
                  """

                % (urllib.quote(referer), disabled, page.like, urllib.quote(referer), disabled, page.dislike))

    class ListHandler(webapp.RequestHandler):
        def get(self):
            for page in Page.all().filter("site =", self.request.get("site")).order("-like").filter("like > ", 0).fetch(20):
                self.response.out.write("""<body style="font-size:8px"><div>%d : %d <a href="%s?phpMyAdmin=cfc2644bd9c947213a0141747c2608b0">%s</a></div></body>""" % (page.like, page.dislike, page.referer, page.title))

    class Page(db.Model):
        site = db.StringProperty()
        title = db.StringProperty()
        referer = db.StringProperty()
        like = db.IntegerProperty(default = 0)
        dislike = db.IntegerProperty(default = 0)

    def main():
        application = webapp.WSGIApplication([('/', MainHandler), ('/list', ListHandler)], debug=True)
        util.run_wsgi_app(application)

    if __name__ == '__main__':
        main()

    Facebook comments:

    comments

    Leave a Reply


    Get Adobe Flash player
    single