2013年3月13日水曜日

かわいいぼたんジェネレータを作ってみた!

前作ったこれを改造したものです

だれでも、簡単に◯◯ちゃんかわいいと呟くことの出来るボタンを作ることができます。

どのように作るかと言いますと

まずしたのページにてボタンを作るボタンをクリックします

次に1つだけの入力フォームにかわいいと呟きたい相手の名前を入力します(ちゃんは自動的につくので気をつけてください)

すると、

大体は前回と同じなのですが、今回実装した面白いことを2つほど紹介したいと思います。

  1. 画像を自動的に取得してくる
  2. タイトル画像の自動生成

まず、1についてなのですが、NAVER画像で項目について検索をかけてそのレスポンスをスクレイピングするだけです。

ソースは以下のようになってます。

#coding: utf-8
from BaseCrawler import BaseCrawler
class CharactorImageCrawler(BaseCrawler):
METHOD = "GET"
COLLECTION = "kawaii"
def scraping(self, bs):
images_wrap = bs.find(attrs={"class": "MdImgList01"});
return [img.attrs["src"] for img in images_wrap.find_all("img")];
def save(self, result, db):
id = self.args[0];
button = db.buttons.find_one({"_id": id});
button["images"] = result;
db.buttons.save(button);

これは前回書いた記事のクローラファーム上で動いています

これで、画像のurlを取得して表示という流れです。

2つ目は文字列を受け取ってPILで処理して画像に変換! …と言いたいところですが…今回はインチキをしましたw

このロゴジェネレータさんを使ってまた、クローリングでかいけつしました。

パラメータをつけてPOSTで送ってやるだけなんですけどね!

少し、BaseCrawlerを書きなおして置かないとダメなところも出てきてしまったので。書きなおしたりもしてやりきりました。

以下はソースです

#coding: utf-8
from BaseCrawler import BaseCrawler
import urllib
IMAGE_BASE = "/Users/yuta/kawaiibutton/static/img/";
URL = "http://www.simwebsol.com/imagetool/default.aspx"
PARAMS = {
"__VIEWSTATE":"/wEPDwUKMTkyNTg4NjcxNGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgQFDENoZWNrQm94Qm9sZAUOQ2hlY2tCb3hJdGFsaWMFEUNoZWNrQm94VW5kZXJsaW5lBQ5DaGVja0JveE1pcnJvcg18rZ9rSGcraW/bvvBz4HOk165Y",
"__EVENTVALIDATION":"/wEWQgL//9fYBwKIrpbVCwKk18beAgLDmcTeBwLBxpmqCQKA1PDuCQKj5Z/MBwKg5Z/MBwKPnbCmCwKYlrLYCgLCptDWCQKJkoXaAgL2tPoNAo7Lz8MDAsXUvfUFAsbUvfUFAsbUgfUFAsfUvfUFAsDUvfUFAsHUvfUFAsLUvfUFAtPUvfUFAuPs2OcLAp71uv0NArXelIoHAoC01MsPAr+dtuEBAvv+5/0OAp6aycQIAo3c+c0CArbN6DwCrpHy4wECv/Cs0QICvrb1jQgC053eiAQCnJm09AkC0c2DvQcC2JO5jw0C1OXN6gsC1fPT7AwCurDI+g4C87mFgwgC8cuS3QcC1OPW5wgCzZeeWALFnd0qArffxMoEAsOUgOgFAtnHsp4DAuOlkLEPArzG/oYGArrm7b0LAsnsxuEGAsjsxuEGAsaD7I8KAoS35PQBApq31PQBAqT2/6AGAqr2i6MGAqn2i6MGArz2i6MGAqT2w54NAtfr1uUEAqWAyNIKAs3rjuQEAsO0jM4BsnWHXjzsrpYv55NGnALvKvpt9jo=",
"TextBoxText":"見崎ちゃんかわいい",
"CheckBoxBold":"on",
"TextBoxBg":"#ffffff",
"TextBoxColorA":"#7fbce8",
"TextBoxColorB":"#4aa0e0",
"DropDownListFont":"Tahoma",
"DropDownListFontSize":"50",
"DropDownListMirror":"0.9",
"CheckBoxMirror":"on",
"DropDownListSimbol":"none",
"RadioButtonListPosition":"1",
"DropDownListDPI":"300",
"DropDownListType":"PNG",
"ButtonCreate":"Create Logo",
}
class LogoCrawler(BaseCrawler):
METHOD = "POST"
def __init__(self, url, params=None):
self.base_url = URL;
self.params = PARAMS;
def pre_crawling(self):
print self.args
self.params["TextBoxText"] = "%sちゃんかわいい" % self.args[1].encode("utf-8")
def pre_scraping(self, html):
pass
def scraping(self, bs):
image = bs.find(attrs={"id": "ImageLogo"})
return image.attrs["src"];
def save(self, result, db):
id = self.args[0];
html = urllib.urlopen("http://www.simwebsol.com/imagetool/" + result[2:]);
f = open(IMAGE_BASE + str(id) + ".png", "w");
f.write(html.read());
if __name__ == '__main__':
LogoCrawler(URL, params=PARAMS).run(2, u"なでこ", method="POST")
view raw LogoCrawler.py hosted with ❤ by GitHub

色とかも弄れるのでパラメータが多いですね…

最近クローリングばっかりで問題解決してる気がするので。少し反省してちゃんとした解決方法も模索出来るようにして行きたいな〜と思っています。

0 件のコメント:

コメントを投稿