レスポンスを早くしたい。(python)

このQ&Aのポイント
  • google app engine/pythonを利用してまとめのまとめサイトを作成しているのですが、レスポンスにかなり時間がかかってしまいます。
  • rssをただ上書きでページに表示するのではなく、過去に配信された記事(このrss配列に保存した日から)は全て保存しておきたいです。
  • 現在、ダッシュボードのAvg CPU (API)という項目が、平均して4000(3000)という状態です。赤文字です。
回答を見る
  • ベストアンサー

レスポンスを早くしたい。(python)

レスポンスを早くしたい。(python) google app engine/pythonを利用してまとめのまとめサイトを作成しているのですが、レスポンスにかなり時間がかかってしまいます。 rssをただ上書きでページに表示するのではなく、過去に配信された記事(このrss配列に保存した日から)は全て保存しておきたいです。 恐らく下記関数の部分が重いと思うのですが、なんとか改善することはできないでしょうか? ※全角スペースでインデントしています。 from google.appengine.ext import webapp from google.appengine.ext import db from google.appengine.ext.webapp import template from google.appengine.ext.webapp.util import run_wsgi_app import os import cgi import math import datetime import feedparser def Rss():  rss = [ ["http://hoge1.com/index.rdf",u"サイト名1","http://hoge1.com/"], ["http://hoge2.com/index.rdf",u"サイト名2","http://hoge2.com/"], ["http://hoge3.com/index.rdf",u"サイト名3","http://hoge3.com/"], ["http://hoge4.com/index.rdf",u"サイト名4","http://hoge4.com/"], ["http://hoge5.com/index.rdf",u"サイト名5","http://hoge5.com/"], ["http://hoge6.com/index.rdf",u"サイト名6","http://hoge6.com/"]]  for r in range(len(rss)):   f = feedparser.parse(rss[r][0])   results = Nich.all().filter('site_url =', rss[r][2]).order('-date').fetch(limit=1)   if results:    for i in range(0,len(f.entries)):     date = datetime.datetime.strptime(f.entries[i].updated,'%Y-%m-%dT%H:%M:%S+09:00')     for result in results:      if result.date < date:       nich = Nich()       nich.e_title = f.entries[i].title       nich.e_body = f.entries[i].summary.replace('\n',' ')       nich.e_url = f.entries[i].links[0].href       nich.site = rss[r][1]       nich.site_url = rss[r][2]       nich.hit = 0;       nich.date = date       nich.put()   else:    for i in range(0,len(f.entries)):     date = datetime.datetime.strptime(f.entries[i].updated,'%Y-%m-%dT%H:%M:%S+09:00')     nich = Nich()     nich.e_title = f.entries[i].title     nich.e_body = f.entries[i].summary.replace('\n',' ')     nich.e_url = f.entries[i].links[0].href     nich.site = rss[r][1]     nich.site_url = rss[r][2]     nich.hit = 0;     nich.date = date     nich.put() 現在、ダッシュボードのAvg CPU (API)という項目が、平均して4000(3000)という状態です。赤文字です。 意味不明な部分があれば言ってくださればすぐに補足しますので、どうか宜しくお願いします。

  • CGI
  • 回答数1
  • ありがとう数21

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

pythonはわからないので、アルゴリズムだけですが。 こういう他サイトからデータを取ってくるCGIは、データの取得に時間がかかることが殆どですから、 一定期間、自分のサーバーにキャッシュデータとして保存しておき、それを利用するようにしてはどうでしょうか。 もちろん一定期間が過ぎればキャッシュデータを更新するためにRSS/RDFファイルを取り直す必要がありますので、その時のみ時間がかかってしまいますが。

関連するQ&A

  • 外部のテキストファイルを読み込みたい

    はじめまして、phpを勉強しています。 ちょっとつまづいてしました。 質問をさせて下さい。 (phpは5.25の環境になります) $mainrss = array ( 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' ); $rssarray = array(); $today = date(U); foreach ($mainrss as $url){ $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "UTF-8", "auto"); (省略) 上記の $mainrss = array ( 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' ); 部分を $mainrssarray = file('rss.txt'); として外部テキストファイルからデータを呼び込もうとしたのですがだめでした。 rss.txtの内容 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' どのようにすれば外部のテキストファイルから呼び込んでくれるでしょうか? 初心者的な質問で大変申し訳ないんですが、アドバイスをよろしくお願い致します;;

    • ベストアンサー
    • PHP
  • 子ノードの出力について

    xmlを出力する際にコロンを含んだ部分につまづいています。 xmlデータはhttp://www3.asahi.com/rss/index.rdf <dc:date>の部分ですが、いろいろなサイトを参考にした結果、 $date = $xml->item->dc->dateや $date = $xml->item->children('http://www3.asahi.com/rss/index.rdf') などとしてもエラーになってしまいます。 出力は echo $date としています。 phpのバージョンは5です。 アドバイスをお願いします。 (php.ini設定の必要がある場合は、こちらもお願いします。)

    • 締切済み
    • PHP
  • pythonでtwitterAPIを使用としたときのGAE上でのエラー

    pythonでtwitterAPIを使用としたときのGAE上でのエラー <class 'urllib2.HTTPError'>: HTTP Error 401: Unauthorized GAE上にこの様なエラーが出てしまい。twitterbotに反映されません。 import urllib2は行っているのですが原因が分からず困っています。 よろしくお願いします # -*- coding: utf-8 -*- import twitter import random import os # from tenki import information from google.appengine.api import users from google.appengine.ext import webapp from google.appengine.ext.webapp import util from google.appengine.ext.webapp import template # twitter.Api.__init__ method for override. def twitter_api_init_gae(self, username=None, password=None, input_encoding=None, request_headers=None): import urllib2 from twitter import Api self._cache = None self._urllib = urllib2 self._cache_timeout = Api.DEFAULT_CACHE_TIMEOUT self._InitializeRequestHeaders(request_headers) self._InitializeUserAgent() self._InitializeDefaultParameters() self._input_encoding = input_encoding self.SetCredentials(username, password) # 天気用に追加 # from urllib2 import urlopen # from xml.dom.minidom import parseString # from xml.etree.ElementTree import * # information = [] # io = urlopen("http://www.google.com/ig/api?weather=Tokyo") # dom = ElementTree(file=io) # cond = dom.find("//current_conditions") # for name in ["condition","temp_c","humidity","wind_condition"]: # information.append(cond.find(name).get("data")) # overriding API __init__ twitter.Api.__init__ = twitter_api_init_gae list = [ u"ante" ,u"Do my best" ,u"piyopiyopiyo" ,u"piyopiyo" ,u"ponyo" ,u"piyo" ,u"my name is anteroom" # ,u"Today's weather is " + information[0] # ,u"Today's weather is " + information[1] # ,u"Today's weather is " + information[2] # ,u"Today's weather is " + information[3] ] post = random.choice(list) api = twitter.Api("hoge","hoge") api.PostUpdate(post)

  • RDFファイルは何故拡張子が.rdfでなくとも良いのでしょうか?

    自社サイトにRSS機能を設置しようとしておりますが、設置スタイルがサイトによって色々で、妥当が何かわかりません。 [1] 中身は同じみたいなのに、何故拡張子が二種類あるんでしょうか? 同じ中身みたいなのに、サイトによって.rdfとされていたかと思うと、.xmlになっていたりもします。 何故二種類の拡張子が共存してるんでしょうか? たとえば、hoge.xmlのファイルを、単に拡張子変更してhoge.rdfにすれば、それだけで.rdfのちゃんとしたファイルになるんでしょうか? [2] なぜ三種類あるのでしょうか? rss 1.0、rss 2.0、atom と、何故三つあるんでしょうか? メーカーが違う的なこと?? [3] 設置場所はどこでも良いのでしょうか? トヨタ:rssというディレクトリを設け、そこに.rdfファイル 日産:rss.nissan.co.jpというサブドメインを設け、そこに.rdfファイル パナソニック:ドメイン直下に設置。.xmlファイル それぞれ違う選択をしていますが、それぞれ何かメリットがあるんでしょうか??

    • ベストアンサー
    • CSS
  • RSS::Parserで取り出した要素と文字列の連結

    以下のサンプルを改造し ----------------------------------------------------- ENTRIES = 5 require 'uri' require 'open-uri' require 'rss' uri = URI.parse('http://b.hatena.ne.jp/entrylist?mode=rss&sort=hot&threshold=3') rss = RSS::Parser.parse(uri.read) rss.output_encoding = 'Shift_JIS' bookmarks = [] rss.items.each do |i| bookmarks.push([i.title, i.link]) end puts "■はてなブックマーク 最近の注目エントリ #{ENTRIES}件" puts puts bookmarks[0, ENTRIES].map {|i| i.join("\n") }.join("\n\n") ----------------------------------------------------- rdfファイルを加工するスクリプトを作成してみましたが エラーが出てしまいます。 エラーメッセージ ----------------------------------------------------- rss.rb:27: undefined method `join' for "Sun, 25 Jan 2009 02:51:06 +0900":String (NoMethodError) from rss.rb:26:in `each' from rss.rb:26 ----------------------------------------------------- サンプルを改造したもの ----------------------------------------------------- ENTRIES = 5 require 'uri' require 'open-uri' require 'rss' uri = URI.parse('honyarara.rdf') rss = RSS::Parser.parse(uri.read) rss.output_encoding = 'Shift_JIS' titles = [] links = [] dates = []#空の配列を生成 rssdata = "" rss.items.each do |i| titles.push([i.title])#pushは配列に要素を加えると言う意味 links.push([i.link]) dates.push([i.date]) end puts "\n\n" for i in 0...5 rssdata += dates[i].join("<a href='").join(links[i]).join("'>").join(titles[i]).join("</a>").join("\n") end puts "\n\n" puts rssdata ----------------------------------------------------- ほかに【.join】の部分を【+】にしてみたり 色々試してみましたがうまくいきませんでした。 rdfの要素を取り出しHTML形式で書き出したいのですが 【↓このような形にして変数に格納したい】 ----------------------------------------------------- 2009/10/17<a href="​http://foo.bar.com/article/2">​使い方難しい。</a>\n 2009/10/18<a href="​http://foo.bar.com/article/3">​使い方難しい2。</a> ----------------------------------------------------- rdfの要素と文字列の連結方法がわかりません。 宜しくお願いします。

    • ベストアンサー
    • Ruby
  • ブログの表示が上手くされません。

    初めてlivedoorでブログを作りました。 gooで検索すると上手く表示されるのですが、 YAHOOで検索すると下記のように表示されます。 そしてアドレスの後に/index.rdfと付いています。 http://www.satorich15.com/index.rdf      ↓  <?xml version="1.0" encoding="UTF-8" ?> - <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:content="http://purl.org/rss… 何か設定が悪いのでしょうか? 宜しくお願いします。

  • xmlとrdfの違いはなんですか?

    rssフィードなどでは、xmlは文法で、rdfは拡張子になっていることが多い。しかし、xmlの文法にxmlの拡張子では駄目なのでしょうか? http://jin115.com/index.rdf

    • ベストアンサー
    • XML
  • rdfファイルをブラウザで表示させたいのですが、ファイルのダウンロードになってしまいます

    現在movabletype3.2を利用していまして、 RSS1.0を利用したい為 http://bizcaz.com/2005/12/30-002935.php こちらのサイトを参考にし、 index.rdf作成は成功し、 rssリーダーでも投稿した記事を読み込む事が できました。 ただhttp://自分のブログアドレス/index.rdf とアドレスバーに入力するとファイルのダウンロードになってしまいます。 他のブログなどではリンクに直接アクセスすると そのrdfの内容が表示されるのですが、 何故ファイルのダウンロードになってしまうのでしょうか? どうすればブラウザで表示させる事ができるのか? またファイルのダウンロードになる現在の状態でも rdfファイルとして問題はないのでしょうか? 皆様よろしくお願い致します。

    • ベストアンサー
    • XML
  • RSSの配信…どうするの???

    こんばんは。 先日から何度も質問させていただいております。 WEBサイトを作っている者です。 RSSを配信しようと思うのですが… それで、ネットで40件くらいのサイトを当たってみましたが、 リンクの仕方がさっぱりわかりません… RSSのファイル(index.rdf)というファイルは作成できて、中の文法等もあっています。 (HPビルダーのサイトサマリー機能で作りました。なので合っているはずです。) そして、WEBページのTOPページの、head内に、 <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="index.rdf"> と書きました。 ここまではあっていると思います。 次に、 <a href="index.rdf" title="Web Feed RSS2" target="_blank">RSS</a> というリンクを張りました。 そして、それをサーバーへアップして、 IE9.0でそのリンクをクリックしてみたら、RDFファイルがダウンロードされました(泣) 他のRSS配信されているサイトを見てみると、《このRSSを購読しますか?》 というページが開くのですが、自分のサイトではダウンロードされます… 何ででしょうか? 因みに、ファイヤフォックスで同じことをすると、《購読しますか?》と聞かれました。 サーバーはFC2ホームページです。 一応、RSSを配信しようとしているサイトを張っておきます。 http://wingnovel.web.fc2.com 何が違うのでしょうか? 教えてください。

    • ベストアンサー
    • HTML
  • python print文のエラーがでます

    #!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function import datetime class TZ(datetime.tzinfo): def __init__(self, name, offset): self.name = name self.offset = offset def utcoffset(self, dt): return datetime.timedelta(hours=self.offset) def tzname(self, dt): return self.name def dst(self, dt): return datetime.timedelta(0) def main(): path = '/sys/bus/w1/devices/28-000*********/w1_slave' with open(path) as f: data = f.read() temp = float(data[data.index('t=')+2:])/1000 FMT = '{},{:.1f}' JST = TZ('JST', 9) now = datetime.datetime.now(JST) print(FMT.format(now.strftime(&quot;%Y/%m/%d %H:%M:%S&quot;), temp)) if __name__ == '__main__': main()
 とうってじっこうすると print(FMT.format(now.strftime(&quot;%Y/%m/%d %H:%M:%S&quot;), temp)) の部分に SyntaxError: invalid syntax とエラーがでます。 どういうことなのか教えていただけるとうれしいです!