「プログラム」カテゴリーアーカイブ

GAEのメモ

GAEのpython版で、データストア使う時。
検索ワードのランキングを表示したくて調べたけど、一発で表示できるような仕組みはないみたい。
で、以下のようにした。

まず、データベースに入れるときに、同じものがあるかチェック。
なければ、別枠に1を入力
あれば、別枠の数字に+1していく。
で、この数字をソートして上位をフェッチで取り出し、ループで表示。

これで一応ちゃんと動いたけど、表示スピートとかデータが多くなったらどうなるか不明。
そんな大きなサイトを作る気はないし、取り敢えずで先に進む。

機械にまかせる

いちいち広告を貼り替えるのが、面倒になってきたのと、楽天とか、アマゾンには自動でコンテンツに合わせて広告を出すやつがあるけど、あまり精度が良くないので、自分で作ってみた。ヤフーのキーフレーズ解析APIを使ってキーフレーズを取り出し、キーフレーズで商品を検索して、表示させる。さっさく試してみたけど、自分でも思わずクリックしたくなる商品が出てくるヽ(´ー`)ノ

以下、キーフレーズを取り出すpytonの自作クラス。注意する点は、ヤフーのAPIはGETではなく、POSTで送らないとなぜか頻繁にエラーが出る点。最初これがわからず半泣きになった。

keytx ここにテキストを入れる
numnum 取り出すキーフレーズの数、2個がちょうどいい感じ。
dekey エラーが出た場合に使うデフォルトのキーワード
あとはappidを入れる

[python]
#coding:utf-8
from xml.etree.ElementTree import XML, ElementTree, Element
import urllib
import urllib2

class Keywordx2:
def __init__(self,keytx,numnum,dekey):
try:
self.keytx = keytx
self.numnum = numnum
self.dekey = dekey
except:
self.keytx = dekey
self.numnum = numnum
self.dekey = dekey
def key_search(self):
try:
query_kkk = { ‘appid’:”, ‘sentence’:self.keytx }
url2 = “http://jlp.yahooapis.jp/KeyphraseService/V1/extract”
encoded_ppp = urllib.urlencode(query_kkk)
xml = ElementTree(file=urllib2.urlopen(url2, encoded_ppp))
dom = xml.getroot()
namespace_url = ‘urn:yahoo:jp:jlp:KeyphraseService’
namespace = ‘{‘ + namespace_url + ‘}’
keylist = dom.getiterator(namespace+’Keyphrase’)
a=””
if len(keylist) <= self.numnum: for i in range(len(keylist)): a += keylist[i].text.encode('utf-8')+"," else: for i in range(self.numnum): a += keylist[i].text.encode('utf-8')+"," return a except: return self.dekey [/python]

Google App Engineで409エラーが出た時の対処法

GAEのツール(ランチャー)は素人でも簡単に使えるように何から何まで揃っているので、今までエラーに遭遇したことがなかったんだけど、昨日デプロイをしようとしたら、はじめてエラーが出た。

説明を見ると、409エラーと書いてある。アプリをDeploy中に、ツールを閉じたりして強制終了するとこのエラーが出るみたい(確かにアップロード中にツールを閉じた覚えがある・・・)。

で、このエラーを解決するためにはrollbackしてくださいと英語で説明が出てるんだけど、やり方がわからず、いろいろ調べて解決。

結論だけ書くと、ウインドウズのコマンドプロンプトを立ち上げて、以下をコピペして貼り付けると解決。

appcfg.py -verbose –no_cookies –email=アカウント名@gmail.com –passin rollback ここにアプリのパス

アカウント名のところには、グーグルのアカウント。
アプリのパスの場所には、ランチャーのpathのところに表示されている

/Users/ほにゃらら/ほにゃらら

を入れる。

間違っていなければ、コマンドプロンプトに入力した後に、パスワードを問い合わせてくるので、使っているアカウントのパスワードを入れてあげる。その後デプロイを試したら、ちゃんと409エラーは解決していた。

‘utf8’ codec can’t decode byte 0x89 in positionというエラー

GAEのpythonで以下のようなエラーが出た。

‘utf8’ codec can’t decode byte 0x89 in position

面倒臭がって検索せずに、文法のチェックとかして、なかなか解決しないのでちゃんと調べたら、英語版のグーグルでトップに出てた。
たんに保存する時の文字コードがutf-8になってない場合に出やすいんだとか。
いきなり日本語とか入れると勝手にシフトJISで保存されるものがあるので、たまにミスってしまう。

pythonのページング

パイソンでページ処理するときのページャー。探しても見つからないので、作ってみた。
取り敢えず動けばいいという感じで作っているので、適当。
↓こんな感じのページデザインになる。

pag

ページ処理部分のプログラムは以下。
urlmojiの部分にURL(ページのクエリが最後に来るように)を入れる。
クラスにしておく方が便利。

[python]
def pager(self, c_page, t_pages, width, urlmoji):
pages = range( self.c_page – self.width, self.c_page + self.width )
pages = [page for page in pages if page > 0 if page <= self.t_pages] if len(pages) > self.width:
if pages.index(self.c_page) > self.width/2:
pages = [page for page in pages if page < self.c_page+self.width/2] pages = pages[-self.width:] else: pages = pages[0: self.width] ppp = '

Pages: ‘
for i in pages:
if i== self.c_page:
ppp += ‘‘+str(i)+’
else:
ppp += ‘‘+str(i)+’
ppp += ‘


return ppp
[/python]