개파와 고양이파의 세력도를 GoogleChartAPI로 그래프화해 결착을 붙인다

개파, 고양이파의 세력 다툼을 종결시키기 위해 웹상에서 개와 고양이 어느 쪽이 주목받고 있는지 비교하는 페이지를 만들어 보았다.

비교군
http://xiidec.appspot.com/vschart.html?q=개, 고양이

결과는 이런 느낌.

고양이 우세. 지난 30일간의 하테나 북마크 수를 집계해 GoogleChartAPI로 그래프화하고 있다. 개 고양이 이외에도 입력 상자에 쉼표로 구분하여 키워드를 넣으면 무엇이든 비교할 수 있다.

이 URL에 키워드를 삽입하여 액세스하면 됩니다.
그러면 RSS가 떨어진다.

다음은 두 번째.



기사의 수에서는 인기도를 측정하는 것이 어렵기 때문에,
얼마나 북마크되어 있는지 계산합니다.
XML 안에

16

라는 항목이 있기 때문에 그것을 계산한다.
그건 그렇고, 이번에는 지난 30 일 이내의 기사 만 가져 왔습니다.
기사의 날짜를보고 싶다면

2005-12-22T14:40:18+09:00<

라는 곳을 보면 좋다.

마지막으로 세 번째.



여기에 등장 Google Chart API.
이것도 사용법은 간단.

?

라는 URL 뒤에

cht=【그래프의 종류】

그리고

&chs=【그래프의 크기】

그리고

&chd=【그래프의 파라미터】

그리고

&chl=【라벨의 이름】

추가



이런 느낌의 URL을 만들 뿐.

순식간에 완성.
완성품이 여기.

vschart.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import webapp2
import os
import urllib
from google.appengine.ext.webapp import template
from datetime import datetime, timedelta
from xml.etree.ElementTree import *


class VsChart(webapp2.RequestHandler):
    def get(self):
        if self.request.get('q')!="":
            url=self.get_hatebu_chart_url(self.request.get('q').replace(" ",",").split(","))
        else:
            url=""
        q=self.request.get('q')
        template_values={
        'url':url,
        'q':q
        }
        path = os.path.join(os.path.dirname(__file__), 'html/vschart.html')
        self.response.out.write(template.render(path, template_values))

    def count_hatebu_tag(self,q):
        count=0
        ago_30=datetime.today()-timedelta(days=30)
        tree = parse(urllib.urlopen('http://b.hatena.ne.jp/search/tag?q=' + q + '&mode=rss'))
        for i in tree.findall('./{http://purl.org/rss/1.0/}item'):
            if ago_30 <= datetime.strptime(i.find('{http://purl.org/dc/elements/1.1/}date').text.split("T")[0], "%Y-%m-%d"):
                count += int(i.find('{http://www.hatena.ne.jp/info/xmlns#}bookmarkcount').text)
        return count

    def get_hatebu_chart_url(self,qList):
        countList=[]
        allCount=0
        for q in qList:
            count = self.count_hatebu_tag(q.encode("utf-8"))
            allCount+=count
            countList.append(count)
        if allCount != 0:
            perList = [str((c*100 / allCount)) for c in countList]
        else:
            perList = ["0"]*len(qList)
        return "https://chart.googleapis.com/chart?cht=p3&chs=400x200&chd=t:"+",".join(perList)+"&chl="+"|".join(qList)


app = webapp2.WSGIApplication([
    ('/vschart.html', VsChart)
    ], debug=True)

vschart.html
<html>
<head>
</head>
<body style="">
<p>&nbsp;</p>
<p>
<meta charset="UTF-8"></meta>
<title>比較くん</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
<div data-role="page" id="first">
    <div data-role="content">   
        <h1>どっちが人気?</h1>
        <form action="/vschart.html" method="get">
比較対象をカンマ区切りで入れてね。過去一ヶ月間のネット上での注目度合いを比較するよ。
<input type="text" name="q" id="q" size="40" value="{{ q }}"><input type="submit" value="比較する">
        </form>
        <div>
            <img src="{{ url }}" alt="たんぽぽ">
        </div>
</div>
</div>
</body>
</html>

요약



이번은 원 그래프이었지만, 막대 그래프라든지 꺾은선 그래프라든지 여러가지 있다.
자세한 내용은 Google의 레퍼런스 페이지에서 체크!

Google Chart Tools:Image Charts (Deprecated)
온갖 모든 종교 전쟁이 종말하네요! 메커니즘 구조는 매우 간단. Hatena 북마크에서 키워드 당 부쿠마 RSS를 가져옵니다. 북마크 수를 세는다. Google Chart API를 호출하는 URL을 생성하여 클라이언트에 전달합니다. 우선 1번째. Hatena 북마크는 키워드 당 새로운 RSS를 제공하고 있다.

음...Deprecated?

Important: The Image Charts portion of Google Chart Tools has been officially deprecated as of April 20, 2012. It will continue to work as per our deprecation policy.

중요: Google의 차트 도구의 이미지 차트 부분은 공식적으로 2012년 4월 20일부터 폐지되었습니다. 그것은 우리의 비추천 정책에 따라 계속 작동합니다.

그래.
이미지를 사용하는 GoogleChartAPI는 더 이상 사용되지 않으며,
Javascript와 SVG를 사용한 새로운 GoogleChartAPI를 사용할 수있는 것 같습니다.

모처럼 만들었는데...

좋은 웹페이지 즐겨찾기