びんじょうしてみました
Pygameを使ってFeedタイトルを電光掲示板っぽく
http://d.hatena.ne.jp/hakobe932/20061103/1162574853
に、タイトルクリックでウェブブラウザで表示する機能を追加しました。
追加部分はかなりかっこわるいソースですが....
以下、パッチ。
--- pygamefeed.py.org 2006-11-16 00:29:32.000000000 +0900 +++ pygamefeed.py 2006-11-16 00:31:22.000000000 +0900 @@ -4,6 +4,7 @@ import sys import feedparser import random +import webbrowser import pygame from pygame.locals import * @@ -14,7 +15,7 @@ FEED_LIMIT = 10 class ScrollText(pygame.sprite.Sprite): - def __init__(self, text, position = (0,0)): + def __init__(self, text, url, position = (0,0)): pygame.sprite.Sprite.__init__(self) font = pygame.font.Font(FONT_PATH, 32) @@ -28,6 +29,7 @@ self.speed = random.choice([-1, 1]) * random.randint(1,5) self.rect.topleft = position + self.url = url def update(self): self.rect = self.rect.move(self.speed, 0) @@ -45,6 +47,12 @@ titles.append(entry.title) return titles; +def get_urls_from(url): + feed = feedparser.parse(url) + urls = [] + for entry in feed['entries']: + urls.append(entry.link) + return urls def main(): pygame.init() @@ -57,15 +65,18 @@ feed_url = 'http://b.hatena.ne.jp/hotentry?mode=rss' feed_titles = get_titles_from(feed_url) + feed_urls = get_urls_from(feed_url) text_group = pygame.sprite.Group() count = 0 + texts = [] for feed_title in feed_titles: text = ScrollText( - feed_title, + feed_title, feed_urls[count], (random.randint(0,SCREEN_WIDTH), 10 + 40 * count) ) text_group.add(text) + texts.append(text) count += 1 if count > FEED_LIMIT: @@ -80,6 +91,12 @@ if (event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE)): return + if event.type == MOUSEBUTTONDOWN: + for t in texts: + mouse_pos = pygame.mouse.get_pos() + p = pygame.Rect(mouse_pos[0], mouse_pos[1], 1, 1) + if t.rect.colliderect(p): + webbrowser.open(t.url) screen.fill( (0,0,0) )
以下のコマンドでパッチ適応できます。
$ patch orignalfile patchfile