<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5539236908252281049</atom:id><lastBuildDate>Thu, 24 Oct 2024 09:58:54 +0000</lastBuildDate><category>Python3</category><category>Twitter</category><category>tweepy</category><category>準備</category><category>Tips</category><category>PyQt5</category><category>Qt5</category><category>microsofttranslator</category><category>環境</category><category>Windows</category><category>Linux</category><category>Unity</category><category>pygame</category><category>PyScripter</category><category>Ubuntu</category><category>GMail</category><category>Mail受信</category><category>XPモード</category><category>blogger</category><category>書籍</category><title>空を飛べないモンティ・パイソン</title><description>Pythonのお勉強メモみたいなもの</description><link>http://sutepon.blogspot.com/</link><managingEditor>noreply@blogger.com (すてぽん)</managingEditor><generator>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-7486717043482743646</guid><pubDate>Thu, 30 Apr 2015 02:15:00 +0000</pubDate><atom:updated>2015-04-30T11:15:00.707+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PyQt5</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Qt5</category><title>PyQt5を使う （ウィジェットのカスタマイズ）</title><description>今回はウィジェットのカスタマイズです。&lt;br /&gt;
&lt;br /&gt;
カスタマイズするウィジェットを継承したクラスを作り、カスタマイズ部分を実装してみます。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;QSpinBoxをカスタマイズして、１６進数対応します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import sys

from PyQt5.QtWidgets import QApplication, QSpinBox
from PyQt5.QtGui import QRegExpValidator
from PyQt5.QtCore import QRegExp

class HexSpinBox(QSpinBox):
    def __init__(self, parent=None):
        super(HexSpinBox, self).__init__(parent)
        self.setRange(0, 255)
        self.validator = QRegExpValidator(QRegExp('[0-9A-Fa-f]{1,8}'))

    def validate(self, text, pos):
        return self.validator.validate(text, pos)

    def textFromValue(self, *args, **kwargs):
        return hex(args[0]).upper()[2:]

    def valueFromText(self, *args, **kwargs):
        return int(args[0], 16)

if __name__ == '__main__':
    app = QApplication(sys.argv)

    dialog = HexSpinBox()
    dialog.setRange(0, 65535)
    dialog.setValue(255)
    dialog.show()

    sys.exit(app.exec_())

&lt;/pre&gt;
&lt;br /&gt;
コンストラクタで、スーパクラス（QSpinBox）のコンストラクタを読んだ後、setRangeメソッドで入力範囲0～255に設定します（10行）&lt;br /&gt;
インスタンス変数validatorに入力規制チェックのための正規表現式を設定します（11行）&lt;br /&gt;
&lt;br /&gt;
クラスメソッド validate は、入力チェック時に呼ばれるメソッドです。&lt;br /&gt;
引数にチェック対象の文字列が渡されますので、コンストラクタで作成した validator変数を使用して入力値のチェックを行います。&lt;br /&gt;
&lt;br /&gt;
クラスメソッド textFromValueは、表示用文字列変換を行うメソッドで、ウィジェットから呼ばれます。&lt;br /&gt;
ここで表示用に数値を16新文字列に変換します。&lt;br /&gt;
&lt;br /&gt;
クラスメソッド valueFromTextは、逆に数値変換を行うメソッドで、同様にウィジェットから呼ばれます。&lt;br /&gt;
入力チェック後に呼ばれますので、ここで16進文字列を数値に変換しています。&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
QSpinBoxを継承しているので、利用方法はQSpinBoxと同じになります。&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sutepon-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=487311344X" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/pyqt5_30.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-8218956759386947571</guid><pubDate>Tue, 28 Apr 2015 02:04:00 +0000</pubDate><atom:updated>2015-04-28T11:04:53.330+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PyQt5</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Qt5</category><title>PyQt5を使う （QDialogを継承する）</title><description>今回はQDialogクラスを継承したクラスによるダイアログの表示です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import sys

from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5.QtWidgets import QLabel, QLineEdit, QCheckBox, QPushButton, QHBoxLayout, QVBoxLayout

class FindDialog(QDialog):

    findPrevious = pyqtSignal(str, int)
    findNext = pyqtSignal(str, int)

    def __init__(self, parent=None):
        super(FindDialog, self).__init__(parent)

        self.label = QLabel(self.tr('Find &amp;amp;what'))
        self.lineEdit = QLineEdit()
        self.label.setBuddy(self.lineEdit)

        self.caseCheckBox = QCheckBox(self.tr('Match &amp;amp;case'))
        self.backwordCheckBox = QCheckBox(self.tr('Search &amp;amp;backword'))

        self.findButton= QPushButton(self.tr('&amp;amp;Find'))
        self.findButton.setDefault(True)
        self.findButton.setEnabled(False)

        self.closeButton = QPushButton(self.tr('Close'))

        self.lineEdit.textChanged[str].connect(self.enableFindButton)
        self.findButton.clicked.connect(self.findClicked)
        self.closeButton.clicked.connect(self.close)

        self.topLeftLayout = QHBoxLayout()
        self.topLeftLayout.addWidget(self.label)
        self.topLeftLayout.addWidget(self.lineEdit)

        self.leftLayout = QVBoxLayout()
        self.leftLayout.addLayout(self.topLeftLayout)
        self.leftLayout.addWidget(self.caseCheckBox)
        self.leftLayout.addWidget(self.backwordCheckBox)

        self.rightLayout = QVBoxLayout()
        self.rightLayout.addWidget(self.findButton)
        self.rightLayout.addWidget(self.closeButton)
        self.rightLayout.addStretch()

        self.mainLayout = QHBoxLayout()
        self.mainLayout.addLayout(self.leftLayout)
        self.mainLayout.addLayout(self.rightLayout)
        self.setLayout(self.mainLayout)

        self.setWindowTitle(self.tr('Find'))
        self.setFixedHeight(self.sizeHint().height())

    def findClicked(self):
        text = self.lineEdit.text()
        cs = Qt.CaseSensitive if self.caseCheckBox.isChecked() == True else Qt.CaseInsensitive

        if self.backwordCheckBox.isChecked() == True:
            self.findPrevious.emit(text, cs)
        else:
            self.findNext.emit(text, cs)

    def enableFindButton(self, text):
        self.findButton.setEnabled(len(text) != 0)

def findNext(text, cs):
    print('Find Next ! text={0} cs={1}'.format(text, cs))

def findPrevious(text, cs):
    print('Find Previous ! text={0} cs={1}'.format(text, cs))

if __name__ == '__main__':
    app = QApplication(sys.argv)

    find = FindDialog()
    find.findNext.connect(findNext)
    find.findPrevious.connect(findPrevious)
    find.show()

    sys.exit(app.exec_())

&lt;/pre&gt;
&lt;br /&gt;
ちょっと長いですが、実行結果はこんな感じになります。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-kTu0rczETyLVMmge-fstY-uEqzElKx_7ZDQAFG9XEz3h_Opec3TRWlAmyuawvPPthHXtIhzyh6LxYq4_E2Tuj4I5uWsOVqE0jmwlFfqiofGX_b7C8t3O62wkrDo8mhv205UvftwcTWzU/s1600/finddialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-kTu0rczETyLVMmge-fstY-uEqzElKx_7ZDQAFG9XEz3h_Opec3TRWlAmyuawvPPthHXtIhzyh6LxYq4_E2Tuj4I5uWsOVqE0jmwlFfqiofGX_b7C8t3O62wkrDo8mhv205UvftwcTWzU/s1600/finddialog.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
QDialogを継承したクラス（FindDialog）のコンストラクタで各ウィジェットの初期化を行いますが、ウィジェットをレイアウトするためにQHBoxLayoutとQVBoxLayoutを使用します。&lt;br /&gt;
&lt;br /&gt;
QHBoxLayoutは登録されたウィジェットを横に配置するウィジェット、QVBoxLayoutは登録されたウィジェットを縦に配置するウィジェットです。&lt;br /&gt;
&lt;br /&gt;
CloseボタンのclickedシグナルにはQDialogのcloseメソッドを、FindボタンのclickedシグナルにはfindClickedメソッド、テキストボックのtextChangedsシグナルにはenableFindButtonメソッドを接続しています。&lt;br /&gt;
&lt;br /&gt;
そして、実際にFindボタンがクリックされた時の処理するためのfindNextとfindPreviousのインスタンス変数をpyqtSignalで定義します。&lt;br /&gt;
&lt;br /&gt;
Findボタンクリック時、"Search backword"チェックボックの値によって、findNextかfindPreviousに接続されたスロットを実行（emit）するようにしています。&lt;br /&gt;
&lt;br /&gt;
作成したFindDialogクラスはインスタンス化し、findNextとfindPreviousのconnectを行う必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sutepon-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=487311344X" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/pyqt5-qwidget.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-kTu0rczETyLVMmge-fstY-uEqzElKx_7ZDQAFG9XEz3h_Opec3TRWlAmyuawvPPthHXtIhzyh6LxYq4_E2Tuj4I5uWsOVqE0jmwlFfqiofGX_b7C8t3O62wkrDo8mhv205UvftwcTWzU/s72-c/finddialog.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-5993338480092977666</guid><pubDate>Mon, 27 Apr 2015 01:25:00 +0000</pubDate><atom:updated>2015-04-27T10:25:20.462+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PyQt5</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Qt5</category><title>PyQt5を使う （ウィジェット間のシグナル連携）</title><description>前回、シグナルをスロットに接続するとユーザ操作に対する応答ができると書きました。&lt;br /&gt;
今回は異なるウィジェットのスロットにシグナルを接続してウィジェット間で同期をとる方法です。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;書籍ではサンプルとして、スライダーとスピンボックスを同期させていました。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QSpinBox, QSlider, QWidget, QHBoxLayout

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window= QWidget()
    window.setWindowTitle('Enter Your Age')

    slider = QSlider(Qt.Horizontal)
    slider.setRange(0, 130)

    spin = QSpinBox()
    spin.setRange(0, 130)

    spin.valueChanged[int].connect(slider.setValue)
    slider.valueChanged[int].connect(spin.setValue)

    spin.setValue(35)

    layout = QHBoxLayout()
    layout.addWidget(spin)
    layout.addWidget(slider)
    window.setLayout(layout)
    window.show()

    sys.exit(app.exec_())

&lt;/pre&gt;
&lt;br /&gt;
実行すると、こんな画面が表示されます。&lt;br /&gt;
（前回とウィンドウの雰囲気が違いますが、これはWin8とWin7の違いです）&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHddzuXeZCZkkB5TQmHl4DDFff4M-zrzBpZY8j2AxLzEvNBL0jDpyPvH9FYNp-yuILOKSapMHkTb6K40gFv5Pak3HQYBWErt8yy_LZ15ZGj9vfkPpcEQkoyx3RVITaKyEl1l157nPPtOWU/s1600/pyqt5_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHddzuXeZCZkkB5TQmHl4DDFff4M-zrzBpZY8j2AxLzEvNBL0jDpyPvH9FYNp-yuILOKSapMHkTb6K40gFv5Pak3HQYBWErt8yy_LZ15ZGj9vfkPpcEQkoyx3RVITaKyEl1l157nPPtOWU/s1600/pyqt5_01.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
スピンボックスの値が変化すると、同時にスライダーのバーの位置も変わりますね。&lt;br /&gt;
&lt;br /&gt;
スピンボックスのvalueChangedシグナルにスライダーのsetValueメソッドを接続する（19行目）ことで、スピンボックスの値が変化するたびに、スライダーの値が変更されるようになっています。&lt;br /&gt;
&lt;br /&gt;
同様にスライダーのvalueChangedシグナルにはスピンボックスのsetValueメソッドを接続する（20行目）ようにしていますので、スピンボックスとスライダーのシグナルが交互に永遠に発行されるようにも見えますが、値の変化がなければvalueChangedシグナルは発行されませんので、永遠に処理が返ってこないようなことにはなりません。&lt;br /&gt;
&lt;br /&gt;
このように相互のウィジェットのメソッドにシグナルを接続することで簡単にウィジェット間の同期をとることができるようになるんですね♪&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sutepon-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=487311344X" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/pyqt5_27.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHddzuXeZCZkkB5TQmHl4DDFff4M-zrzBpZY8j2AxLzEvNBL0jDpyPvH9FYNp-yuILOKSapMHkTb6K40gFv5Pak3HQYBWErt8yy_LZ15ZGj9vfkPpcEQkoyx3RVITaKyEl1l157nPPtOWU/s72-c/pyqt5_01.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-5919879771271851786</guid><pubDate>Sat, 25 Apr 2015 00:14:00 +0000</pubDate><atom:updated>2015-04-25T09:14:06.023+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PyQt5</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Qt5</category><title>PyQt5を使う （シグナルとスロットの接続）</title><description>ユーザ操作に対する応答ですが、Qtでは状態の変化を「&lt;strong&gt;シグナル&lt;/strong&gt;」というそうです。&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;シグナル&lt;/strong&gt;は関数（Qtでは「&lt;strong&gt;スロット&lt;/strong&gt;」）に結びつけて使用することで処理を実行できるようになります。&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;次のサンプルは、ボタンをクリックすると終了するというものです。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QPushButton

if __name__ == '__main__':
    app = QApplication(sys.argv)

    button = QPushButton('Quit')
    button.clicked.connect(quit)
    button.show()

    sys.exit(app.exec_())
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
9行目、ボタンウィジェットQPushButtonをインスタンス化します。&lt;br /&gt;
引数でボタンのキャプションを'Quit'に指定します。&lt;br /&gt;
QPushButtonはクリックするとclicked()というシグナルを発行します。&lt;br /&gt;
PyQtでは、シグナルのconnectメソッドにスロット関数を指定することで、シグナルとスロットを接続することができるわけです。&lt;br /&gt;
&lt;br /&gt;
10行目でclickedシグナルにQApplicationのquitスロットを指定して、クリック時にアプリを終了するようにしています。&lt;br /&gt;
&lt;br /&gt;
PyQtのシグナルはPyQtSignalクラスで管理されているようですが、ウィジェットにはclickedみたいにPyQtSignalをインスタンス化したプロパティがたくさん定義してあるという感じなのかな…&lt;br /&gt;
（ソースがないのでイマイチ不明ですが…）&lt;br /&gt;
&lt;br /&gt;
実行すると、こんな感じです。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGjujfaxFN4O2_5GiOKSvEnIQzP58M1bZa58zGo9bVgxQY5eWcSvs1CltORN-oeepeMQvYpeLaJva3TFPCUXb5hxM_EA-HWACl_Hi3KrSPhzuPQ8AButzgToZGhnf_S4s1xIWcIYawdP2a/s1600/SignalSlot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGjujfaxFN4O2_5GiOKSvEnIQzP58M1bZa58zGo9bVgxQY5eWcSvs1CltORN-oeepeMQvYpeLaJva3TFPCUXb5hxM_EA-HWACl_Hi3KrSPhzuPQ8AButzgToZGhnf_S4s1xIWcIYawdP2a/s1600/SignalSlot.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Quitボタンをクリックすると、終了します。&lt;br /&gt;
それだけです…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sutepon-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=487311344X" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/pyqt5.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGjujfaxFN4O2_5GiOKSvEnIQzP58M1bZa58zGo9bVgxQY5eWcSvs1CltORN-oeepeMQvYpeLaJva3TFPCUXb5hxM_EA-HWACl_Hi3KrSPhzuPQ8AButzgToZGhnf_S4s1xIWcIYawdP2a/s72-c/SignalSlot.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-4231778736728891222</guid><pubDate>Fri, 24 Apr 2015 00:40:00 +0000</pubDate><atom:updated>2015-04-24T09:40:37.918+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PyQt5</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Qt5</category><title>Hello PyQt5</title><description>新しい言語を勉強する時は、”Hello World”を出力するのがお約束になっていますが、入門Qt4プログラミング（オライリー・ジャパン）も同様のようです。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QLabel

if __name__ == '__main__':
    app = QApplication(sys.argv)

    label = QLabel('Hello Qt5!')
    label.show()

    sys.exit(app.exec_())&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
3～4行目でQApplicationとQLabelをインポートしていますが、どうやらQt4とQt5はパッケージの構成が異なるようです。&lt;br /&gt;
&lt;br /&gt;
7行目、QApplicationをインスタンス化します。&lt;br /&gt;
ここでは、コマンドライン引数が必要になるため、パラメータとして sys.argv を指定します。&lt;br /&gt;
&lt;br /&gt;
9行目、QLabel をインスタンス化します。&lt;br /&gt;
QLabel は、テキストまたはイメージの表示を行うウィジェットです。&lt;br /&gt;
Qtではユーザが操作するユーザインターフェース要素のことをウィジェットと言うんだそうです。&lt;br /&gt;
（Unixもそうらしいです、勉強になりますね♪）&lt;br /&gt;
QLabelをインスタンス化する際のパラメータとして’Hello Qt5!’を指定しています。&lt;br /&gt;
これが表示する文字列ですね。&lt;br /&gt;
&lt;br /&gt;
10行目、ここでラベルを表示状態にします。&lt;br /&gt;
Qtではウィジェットは常に非表示の状態で生成されるので、インスタンス化が終わったら表示させます。&lt;br /&gt;
&lt;br /&gt;
12行目、制御をQtに渡します。&lt;br /&gt;
これによってアプリはイベントループに入り、ユーザからの操作を待つということですね。&lt;br /&gt;
&lt;br /&gt;
ウィジェットは単体でもウィンドウとして機能するようで、今回のようにラベルだけをウィンドウとしてアプリ実行することができます。&lt;br /&gt;
なんて便利なんでしょう♪&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcB5dmrOpCmvXJbF4D05UrYZa_nLW2QY0ta6oPhfaGX89OKHTCWdkA4eneEKgiWYzOWyJoldrA8vqv0FNA8BpthylOlqSXJ2PrmBv7Qlw1tejKBzFiaiMSlRxEv9xXipGYR-eXZouhxqiT/s1600/HelloQt_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcB5dmrOpCmvXJbF4D05UrYZa_nLW2QY0ta6oPhfaGX89OKHTCWdkA4eneEKgiWYzOWyJoldrA8vqv0FNA8BpthylOlqSXJ2PrmBv7Qlw1tejKBzFiaiMSlRxEv9xXipGYR-eXZouhxqiT/s1600/HelloQt_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
上のサンプルでは、QLabelのインスタンス化時に’Hello Qt5!’という文字列を指定していますが、HTMLも指定可能だそうです。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python first-line:9"&gt;    label = QLabel('&amp;lt;h2&amp;gt;&amp;lt;i&amp;gt;Hello&amp;lt;/i&amp;gt; &amp;lt;span style="color: red;"&amp;gt;Qt5!&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;')
&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigRU9JfykycB0D92qQPrFgajAoR35vlIFcQ32se_8AP88yvGAjyYSugyg7M-GDG8OXiVjN8LQPwc40MN0tsSRgZOAF626MDd6oW77UUErCPOd2W3oOe5lTV6rJECkyyowe6sejgPo5_422/s1600/HelloQt_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigRU9JfykycB0D92qQPrFgajAoR35vlIFcQ32se_8AP88yvGAjyYSugyg7M-GDG8OXiVjN8LQPwc40MN0tsSRgZOAF626MDd6oW77UUErCPOd2W3oOe5lTV6rJECkyyowe6sejgPo5_422/s1600/HelloQt_2.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
画像も出力させるには以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QLabel
from PyQt5.QtGui import QPixmap

if __name__ == '__main__':
    app = QApplication(sys.argv)

    label = QLabel()
    label.setPixmap(QPixmap("[画像ファイルパス]"))
    label.show()

    sys.exit(app.exec_())&lt;/pre&gt;
&lt;br /&gt;
QLabelウィジェットを引数なしでインスタンス化し、setPixmapメソッドで画像データを指定することで可能になります。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwEfjSviwVA0GgB9-JIE_2PdlToPWgMXDuk-LBK24rhepE8BpF4igofbZKS3FpoTMqbx7NYe0pnhlwvYCrAZdJqt0p7MNnLJhInc73cBAS9PI6tnff75k5-tRM-xzuJ-nSYwocJoCEr18r/s1600/HelloQt_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwEfjSviwVA0GgB9-JIE_2PdlToPWgMXDuk-LBK24rhepE8BpF4igofbZKS3FpoTMqbx7NYe0pnhlwvYCrAZdJqt0p7MNnLJhInc73cBAS9PI6tnff75k5-tRM-xzuJ-nSYwocJoCEr18r/s1600/HelloQt_3.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
GUIがお手軽にできていいですね♪&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sutepon-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=487311344X" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description><link>http://sutepon.blogspot.com/2015/04/hello-pyqt5_24.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcB5dmrOpCmvXJbF4D05UrYZa_nLW2QY0ta6oPhfaGX89OKHTCWdkA4eneEKgiWYzOWyJoldrA8vqv0FNA8BpthylOlqSXJ2PrmBv7Qlw1tejKBzFiaiMSlRxEv9xXipGYR-eXZouhxqiT/s72-c/HelloQt_1.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-5666275842211374323</guid><pubDate>Thu, 23 Apr 2015 00:34:00 +0000</pubDate><atom:updated>2015-04-23T09:34:38.232+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PyQt5</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Qt5</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>GUI は何使う？</title><description>長いこと tweepy やってたので、ここらへんで休憩して別の事やろうかなと思います。&lt;br /&gt;
&lt;br /&gt;
さて、PythonでGUIというとやはり標準でついている Tkinter なんですが、あまり洗練されていないとの評判です。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;なので、新しく何か覚えようと思い、&lt;a href="https://www.google.co.jp/?gws_rd=ssl#q=python+gui+%E3%81%8A%E3%81%99%E3%81%99%E3%82%81"&gt;先生に教えてもらった&lt;/a&gt;ところ、いくつか候補がありました。&lt;br /&gt;
&lt;br /&gt;
その中で以前から興味があった Qt に決めました♪ ｍ9っ｀Д´) ﾋﾞｼｯ!!&lt;br /&gt;
&lt;br /&gt;
Qtの最新は５らしいんですが、Qt5に対応しているのはPyQtだけということで、まずダウンロードからです。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.riverbankcomputing.com/software/pyqt/download5"&gt;PyQt5 ダウンロードページ&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Windows大好きな自分としては、インストールを楽にしたいので迷わず&amp;nbsp;Binary Packages からWindows Installer を選択です！&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWxWe6X-Ddy_87Gi-4AndDhS4Agg9cbWNzry8MhgBSlRbL-ihBH4wxbFmCDiWuJUNZhdfmfLiBqqJ5Z4F4bacnPFxHZknLHWtM5TLMprmHL2DAe1rbffsJaXGggajmV0cvPVOfMJPdQxdQ/s1600/pyqt_download.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWxWe6X-Ddy_87Gi-4AndDhS4Agg9cbWNzry8MhgBSlRbL-ihBH4wxbFmCDiWuJUNZhdfmfLiBqqJ5Z4F4bacnPFxHZknLHWtM5TLMprmHL2DAe1rbffsJaXGggajmV0cvPVOfMJPdQxdQ/s1600/pyqt_download.png" height="233" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ドキュメントが無いそうですが、実践あるのみなので気にせずこちらを選びます。&lt;br /&gt;
&lt;br /&gt;
ダウンロードが終わったら、実行してインストールが完了です♪&lt;br /&gt;
ソースやSIPのコンパイルもしなくていいので楽ちんです。&lt;br /&gt;
&lt;br /&gt;
Qtを使うのは初めてで、まったくわからりませんからとりあえず本に頼ることにします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZquaurMGB1CynUjTuwYxsAwIhemWQQU_0EgPG6rrMi2HjoGK48npwLjiK5yJiwM10GtDnIPi1_1iHrN1CDt24A6mLi8hBshbZrqjz0ByjHHiNcR6ROkhyphenhyphen5lMcz1Z5P-Jo6MLYDnXWMYuH/s1600/Qt4%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZquaurMGB1CynUjTuwYxsAwIhemWQQU_0EgPG6rrMi2HjoGK48npwLjiK5yJiwM10GtDnIPi1_1iHrN1CDt24A6mLi8hBshbZrqjz0ByjHHiNcR6ROkhyphenhyphen5lMcz1Z5P-Jo6MLYDnXWMYuH/s1600/Qt4%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0.jpg" height="320" width="250" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Qt4ですが、Qt5に比較的最近変わったとのことなので、信頼のオライリーに頼ります。&lt;br /&gt;
180度言語仕様が変わるなんてないでしょうし、変更点も込みで勉強していきます。&lt;br /&gt;
&lt;br /&gt;
本ではC++が対象ですが、掲載されているソースをPyQtに移植していけばPyQtも自然と覚えるでしょう。&lt;br /&gt;
&lt;br /&gt;
ということで、しばらくは掲載サンプルを移植したものを紹介していきます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sutepon-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=487311344X" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/gui.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWxWe6X-Ddy_87Gi-4AndDhS4Agg9cbWNzry8MhgBSlRbL-ihBH4wxbFmCDiWuJUNZhdfmfLiBqqJ5Z4F4bacnPFxHZknLHWtM5TLMprmHL2DAe1rbffsJaXGggajmV0cvPVOfMJPdQxdQ/s72-c/pyqt_download.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-6618188770554623987</guid><pubDate>Wed, 22 Apr 2015 01:32:00 +0000</pubDate><atom:updated>2015-04-22T10:32:28.759+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (フィルターストリームを使う)</title><description>前回はユーザーストリームを使ってホームタイムラインのストリーミングをやってみました。&lt;br /&gt;
今回は、フィルターストリームを使って、リストに登録されているユーザのストリーミングを行います。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;filterメソッドを使うと、指定された条件にマッチしたステータスを取得することが出来ます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import tweepy

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

class ListStream(tweepy.streaming.StreamListener):

    def on_status(self, status):
        print('-------------------------------------------------------------------')
        print('name:' + status.author.name)
        print(status.text)

    def on_error(self, status_code):
        print('error:' + str(status_code))
        if status_code == 420:
            return False

    def __init__(self):
        super(ListStream, self).__init__()

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
        api = tweepy.API(auth)

        me = api.me()
        lst = api.lists_all()[0]
        follow = []

        for page in tweepy.Cursor(api.list_members, owner_id=me.id, list_id=lst.id).pages():
            for user in page:
                follow.append(user.id_str)

        stream = tweepy.Stream(auth, ListStream(), secure=True)
        stream.filter(follow=follow)


    except tweepy.TweepError as e:
        print(e.reason)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
filterメソッドには、パラメータとしてfollower, track, locationのいずれかを指定する必要があります。&lt;br /&gt;
ここでは、先頭のユーザリストに登録したユーザのリストをfollowerパラメータに指定してリストのストリーミングを行います。&lt;br /&gt;
&lt;br /&gt;
カーソルを使ってリストに登録されている全てのユーザIDのリストを生成します。（33～35行目）&lt;br /&gt;
（リストに登録されているユーザが多いとここでエラーになりますのでご注意を）&lt;br /&gt;
生成したリストをfilterメソッドのfollowerパラメータに指定するだけです。&lt;br /&gt;
&lt;br /&gt;
これ以外にもtrackパラメータでキーワード、locationパラメータで緯度経度を矩形範囲で指定しての絞り込みも出来ます。&lt;br /&gt;
trackキーワードはOR演算での絞り込みのようです。&lt;br /&gt;
&lt;br /&gt;
ストリームイベントの処理は変わりませんので割愛します。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://sutepon.blogspot.com/2015/04/tweepy_22.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-39652972682207668</guid><pubDate>Tue, 21 Apr 2015 00:51:00 +0000</pubDate><atom:updated>2015-04-21T09:51:57.647+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (ユーザストリームを使う)</title><description>HTTP接続を維持したままステータスなどのオブジェクトを逐次配信されるストリーミングAPIがありますが、tweepyでも利用することが出来ます。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;a href="https://dev.twitter.com/streaming/overview"&gt;ストリーミングAPIは大きく分けて3種類&lt;/a&gt;あります。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Public Streams&lt;/li&gt;
&lt;li&gt;User Streams&lt;/li&gt;
&lt;li&gt;Site Streams&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
今回はユーザストリームを使ってみます。&lt;br /&gt;
tweepyではストリームクラス StreamListener を継承したクラスで配信されたステータスを扱います。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import tweepy

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

class HomeStream(tweepy.streaming.StreamListener):

    def on_status(self, status):
        print('-------------------------------------------------------------------')
        print('name:' + status.author.name)
        print(status.text)

    def on_error(self, status_code):
        print('error:' + str(status_code))
        if status_code == 420:
            return False

    def __init__(self):
        super(HomeStream, self).__init__()

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)

        stream = tweepy.Stream(auth, HomeStream(), secure=True)
        stream.userstream()

    except tweepy.TweepError as e:
        print(e.reason)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
StreamListenerを継承したHomeStreamを作成し、userstreamメソッドを実行することでストリームAPIを使用することが出来ます。&lt;br /&gt;
&lt;br /&gt;
配信されたステータスはon_statusメソッドで処理します。&lt;br /&gt;
他にもオーバライドできるメソッドがありますが、on_connect以外のメソッドでFalseを返すことで、ストリームを終了することが出来ます。&lt;br /&gt;
&lt;br /&gt;
サンプルでは、on_errorのみ実装していますが、パラメータstatus_codeが420を返す場合、再接続アルゴリズムが間違っている場合がありますので、Falseでストリーミングを終了するようにしたほうがいいでしょうね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_21.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-7949723028284040217</guid><pubDate>Mon, 20 Apr 2015 00:49:00 +0000</pubDate><atom:updated>2015-04-20T11:27:27.865+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (トレンドの取得)</title><description>トレンド情報を取得します。&lt;br /&gt;
取得には、WOEID（Yahoo! Where On Earth ID）が必要になります。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;取得は&amp;nbsp;trends_placeメソッドにWOEIDを指定しますが、決められたWOEIDしか受け付けないようです。&lt;br /&gt;
指定できるWOEIDを取得するには&amp;nbsp;trends_availableメソッドを使用します。&lt;br /&gt;
&lt;br /&gt;
サンプルでは、これらを組み合わせてトレンドを取得し、ブラウザでトレンドをキーワード検索させてみます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import tweepy
import urllib
import webbrowser

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

class myExeption(Exception):
    pass

def InputNum(min=0, max=99):
    tmp = input('No ? ')
    if tmp.isnumeric() == False:
        return None

    num = int(tmp)
    return num if (num&amp;gt;= min) and (num &amp;lt;= max) else None


if __name__ == '__main__':
    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
    api = tweepy.API(auth)

    woeid = []

    idx = 0;
    print('----- Area -----')
    for topic in api.trends_available():
        if topic['country'].lower() =='japan':
            woeid.append(topic['woeid'])
            print("{0}:{1}".format(idx, topic['name']))
            idx += 1

    try:
        no = InputNum(max=len(woeid)-1)
        if no == None:
            raise myExeption

        idx = 0
        place = api.trends_place(id=woeid[no])[0]
        print('----- Trend -----')
        for trend in place['trends']:
            print( '{0}:{1}'.format( idx, urllib.parse.unquote( trend['query'] ) ) )
            idx += 1

        no = InputNum(max=len(place['trends'])-1)
        if no == None:
            raise myExeption

        trend = place['trends'][no]
        webbrowser.open(trend['url'])

    except:
        print('Error.')
&lt;/pre&gt;
&lt;br /&gt;
実行すると、コンソールにエリア一覧が表示されます。&lt;br /&gt;
エリアを指定すると、そのエリアでのトレンドワードが10件表示されますので、同じく番号で指定しま&lt;br /&gt;
す。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwaYW-PoECZMhltWt_BmHH8rii9tOhCVZsV2OQRnYXgREaTeG8PM4ex9gr42hxjSBJFcNXAt60NMSJsuHlZr-2l2q21Ix8sPAwtKVWJ7DF-r4fEPKfPbnUedXgZ1y2Q1DNMT-Qkw2XtmDq/s1600/tweepy_08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwaYW-PoECZMhltWt_BmHH8rii9tOhCVZsV2OQRnYXgREaTeG8PM4ex9gr42hxjSBJFcNXAt60NMSJsuHlZr-2l2q21Ix8sPAwtKVWJ7DF-r4fEPKfPbnUedXgZ1y2Q1DNMT-Qkw2XtmDq/s1600/tweepy_08.png" height="320" width="272" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
その後、ブラウザが起動し、トレンドワードの検索結果が表示されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw01ySF8wOzo4NSx_pYf9Ka6aakyjxE5fVgMZE04cL3lqelkt_9OR8RInsHKpAzcI3ro4s9DHUlulMJmYLXnilqWU8vPqn8nZ1yDC06Utjd2rTUUyy1GFKtO4B5SLrQNBxTByF62Sh6B9S/s1600/tweepy_09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw01ySF8wOzo4NSx_pYf9Ka6aakyjxE5fVgMZE04cL3lqelkt_9OR8RInsHKpAzcI3ro4s9DHUlulMJmYLXnilqWU8vPqn8nZ1yDC06Utjd2rTUUyy1GFKtO4B5SLrQNBxTByF62Sh6B9S/s1600/tweepy_09.png" height="190" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_20.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwaYW-PoECZMhltWt_BmHH8rii9tOhCVZsV2OQRnYXgREaTeG8PM4ex9gr42hxjSBJFcNXAt60NMSJsuHlZr-2l2q21Ix8sPAwtKVWJ7DF-r4fEPKfPbnUedXgZ1y2Q1DNMT-Qkw2XtmDq/s72-c/tweepy_08.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-7316689513245669087</guid><pubDate>Sat, 18 Apr 2015 22:39:00 +0000</pubDate><atom:updated>2015-04-19T07:39:33.167+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (カーソルを使ったフォロワー情報の取得)</title><description>フォロワー（ユーザ）情報を取得します。&lt;br /&gt;
ユーザIDだけなら1回で5000人分取得できますが、IDをだけでは誰が誰やら分かりません…&lt;br /&gt;
ユーザ情報として取得するには1回に200人分が限界です。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;200人以上のフォロワーがいる場合は、何回かに分けて取得する必要がありますが、そのためにパラメータとしてcursorを指定する必要があります。&lt;br /&gt;
cursorは、-1で先頭ページを指します。&lt;br /&gt;
&lt;br /&gt;
Twitterのカーソルについては、別途詳しく紹介しているサイトを見ていただくとして、tweepyには、カーソルを扱うためのオブジェクトがあります。&lt;br /&gt;
&lt;br /&gt;
今回は、カーソルオブジェクトを使って、フォロワー情報を取得する方法を紹介します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import tweepy
from tweepy.error import TweepError

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

if __name__ == '__main__':
    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
    api = tweepy.API(auth)

    try:
        pos = 1
        for user in tweepy.Cursor(api.followers, count=200, cursor=-1).items():
            print(str(pos) + ":" + user.screen_name + "(" + str(user.name) + ")")
            pos += 1

    except TweepError as e:
        print(e.reason)
&lt;/pre&gt;
&lt;br /&gt;
Cursorオブジェクトは、第一引数に実行するメソッドを、第二引数以降にメソッドの引数を指定します。&lt;br /&gt;
&lt;br /&gt;
ここでは、フォロワー情報の取得メソッドfollowersを第一引数に、followersメソッドの引数であるcountとcursorを第二引数以降に指定して、Cursorオブジェクトのitemsメソッドを実行します。&lt;br /&gt;
itemsメソッドはイテレータとして動作しますので、userオブジェクトのリストが取得されます。（16行目）&lt;br /&gt;
&lt;br /&gt;
ただし、followersメソッドのリミットを超えるとTweepErrorが発生しますので、フォロワーさんが多い場合は、違う方法でフォロワー情報を取得する必要がありますね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_19.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-4029731630083394015</guid><pubDate>Fri, 17 Apr 2015 22:28:00 +0000</pubDate><atom:updated>2015-04-18T07:28:37.369+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (ユーザ情報の取得)</title><description>ユーザ情報を取得します。&lt;br /&gt;
meメソッドで自分、get_userメソッドでユーザIDを指定して取得することができます。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Twitter APIで取得できるユーザ情報の詳細は、&lt;a href="https://dev.twitter.com/overview/api/users"&gt;ここ&lt;/a&gt;を参照してください。&lt;br /&gt;
&lt;br /&gt;
英語ですが、例が記載してあるのでそんなに難しくないです。&lt;br /&gt;
ここでは例としてID、スクリーン名、名前などを表示させます。&lt;br /&gt;
&lt;br /&gt;
１．自分の情報を取得する。&lt;br /&gt;
meメソッドで取得できます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import tweepy

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
        api = tweepy.API(auth)

        user = api.me()

        print('id:' + user.id_str)                   # ユーザID
        print('screen_name:' + user.screen_name)     # スクリーン名
        print('name:' + user.name)                   # 表示名
        print('description:' + user.description)     # 自己紹介
        print('created_at:' + str(user.created_at))  # 作成日時
        print('location:' + user.location)           # 場所
        print('lang:' + user.lang)                   # 言語

    except tweepy.TweepError as e:
        print(e.reason)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzIEbfTK2b_UiQ0Cp-dEEq2rEAatghX423JJUBiRtNEiKXbOQMPb6HnkBx1YgZ1z6x9af200ePf6GaDhBivQcu5HT3zwlWc9OVRW0oArplOTVfSf9XyoNearc7qsZbBeddI6SqgJrcxhpj/s1600/tweepy_07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzIEbfTK2b_UiQ0Cp-dEEq2rEAatghX423JJUBiRtNEiKXbOQMPb6HnkBx1YgZ1z6x9af200ePf6GaDhBivQcu5HT3zwlWc9OVRW0oArplOTVfSf9XyoNearc7qsZbBeddI6SqgJrcxhpj/s1600/tweepy_07.png" height="240" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
実行結果&lt;/div&gt;
&lt;br /&gt;
例ではアカウント作成日時を表示させていますが、created_atに格納されている日付はUTC（協定世界時）ですので、日本と9時間の差があります。 userには、utc_offset にUTCとの差分(32400[9時間])が格納されていますので、正確にはこの値を加算したものが現地時間になりますね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
２．他のユーザの情報を取得する。&lt;br /&gt;
get_userメソッドを使用しますが、ユーザIDまたはスクリーン名をパラメータで指定します。&lt;br /&gt;
&lt;br /&gt;
(1) ユーザIDで取得する場合&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python first-line:14"&gt;user = api.get_user(id=[ユーザID])
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
(2) スクリーン名で取得する場合&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python first-line:14"&gt;user = api.get_user(screen_name=[スクリーン名])
&lt;/pre&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_18.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzIEbfTK2b_UiQ0Cp-dEEq2rEAatghX423JJUBiRtNEiKXbOQMPb6HnkBx1YgZ1z6x9af200ePf6GaDhBivQcu5HT3zwlWc9OVRW0oArplOTVfSf9XyoNearc7qsZbBeddI6SqgJrcxhpj/s72-c/tweepy_07.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-1042338978864214536</guid><pubDate>Fri, 17 Apr 2015 00:46:00 +0000</pubDate><atom:updated>2015-04-17T09:46:03.942+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (ツイートの検索をする)</title><description>searchメソッドでツイートの検索をすることが出来ます。&lt;br /&gt;
複数のキーワードを組み合わせることも出来ます。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;pre class="brush: python"&gt;import tweepy

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
        api = tweepy.API(auth)

        keyword = ['ストライクウィッチーズ', 'フィギュア']
        query = ' AND '.join(keyword)

        for status in api.search(q=query)[::-1]:
            print('-----------------------------------------------------')
            print('name:' + status.user.name)
            print(status.text)

    except tweepy.TweepError as e:
        print(e.reason)

&lt;/pre&gt;
&lt;br /&gt;
キーワードは、' AND ' や ' OR 'で区切ることで検索対象を増やしたり絞ることが出来ます。&lt;br /&gt;
また、パラメータ lang で言語を、パラメータ locationで国を条件に加える事も可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_17.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-5895394886672066161</guid><pubDate>Thu, 16 Apr 2015 03:20:00 +0000</pubDate><atom:updated>2015-04-16T12:20:28.640+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (公式リツイートする)</title><description>非公式ツイートは、引用するテキストに"RT"をつけて uodate_status することで可能ですが、公式リツイートは専用のretweetメソッドを使います。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;pre class="brush: python"&gt;import tweepy

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
        api = tweepy.API(auth)

        api.retweet(id=[ツイートID])

    except tweepy.TweepError as e:
        print(e.reason)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;パラメータidにリツイートするIDを指定するだけでOKです。&lt;/pre&gt;
&lt;pre class="brush: python"&gt;&lt;/pre&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_16.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-8569490425471812148</guid><pubDate>Wed, 15 Apr 2015 02:29:00 +0000</pubDate><atom:updated>2015-04-15T11:31:06.754+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (ツイートする)</title><description>tweepyでツイートするには, update_statusメソッド または update_with_mediaメソッドを使います。&lt;br /&gt;
update_statusメソッドは文字ツイート、update_with_mediaメソッドは画像付きです。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;pre class="brush: python"&gt;import tweepy

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
        api = tweepy.API(auth)

        api.update_status(status='ツイートできるかなっ？')
        api.update_with_media(status='画像付きだってできるんよ', filename='（画像ファイルパス）')

    except tweepy.TweepError as e:
        print(e.reason)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
自分が使っているtweepyはバージョン3.2なのですが、ツイートメッセージを"status="で指定しないとエラーになってしまいます。&lt;br /&gt;
他のサイトでは指定していないのですが、今のバージョンでは明示的に指定しないとダメなのかも知れません。&lt;br /&gt;
&lt;br /&gt;
メソッドの戻り値でツイート結果を知ることが出来ます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;status = api.update_status(status='ツイートできるかなっ？') 

id = status.id   # ツイートのID
dt = status.created_id   # ツイート日時
&lt;/pre&gt;
&lt;br /&gt;
ツイートはIDが割り当てられますので、リプライするとき等に使用します。&lt;br /&gt;
リプライは、パラメータ&amp;nbsp;in_reply_to_status_id にツイートIDを指定します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;api.update_status(status=' RT リツートだよっ♪', in_reply_to_status_id=[ツイートID]) 
&lt;/pre&gt;
&lt;br /&gt;
他にも位置情報を指定する事が可能です。&lt;br /&gt;
&lt;br /&gt;
Twitter APIのレスポンスがエラーのときは、例外 TweepError が発生します。&lt;br /&gt;
reason メソッドでエラーメッセージを取得する 事ができます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_15.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-8668663850338649675</guid><pubDate>Tue, 14 Apr 2015 01:25:00 +0000</pubDate><atom:updated>2015-04-14T10:25:15.555+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>tweepyライブラリを利用する (タイムラインの取得)</title><description>tweepyでタイムラインを取得します。&lt;br /&gt;
home_timelineでホームタイムライン、user_timelineでユーザタイムラインです。&lt;br /&gt;
list_timelineユーザリストのタイムラインですが、こちらはリストIDが必要になるので、今回は割愛します。&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a name='more'&gt;&lt;/a&gt;１．ホームライムライン&lt;/div&gt;
&lt;div&gt;
home_timelineメソッドを使うと、ツイート(status)のリストが取得できます。&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import tweepy

CONSUMER_KEY    = '（コンシューマキー）'
CONSUMER_SECRET = '（コンシューマシークレット）'
ACCESSS_TOKEN   = '（アクセストークン）'
ACCESS_SECRET   = '（アクセストークン シークレット）'

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)
        api = tweepy.API(auth)

        for status in api.home_timeline(count=10)[::-1]:
            print('-----------------------------------------------------')
            print('name:' + status.user.name)
            print(status.text)

    except tweepy.TweepError as e:
        print(e.reason)

&lt;/pre&gt;
&lt;br /&gt;
パラメータ count の値が取得するツイート数になります。&lt;br /&gt;
取得したタイムラインのリストは新しいツイートから順に格納されていますが、ここではコンソールに出力する関係上逆順で表示させています。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVE7jqZzrAE9UqRSmKCyOQty6agFsstn4AhGdiWKtDJJnZ5fioPjK_vHeweVuLRz-2TmZmG8yolEN2orMSw018QHc-Kz17ByWWlY-EtJmaLB501qGTBvMyyviirRQoUJkCjqqaL1exkdRh/s1600/tweepy_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVE7jqZzrAE9UqRSmKCyOQty6agFsstn4AhGdiWKtDJJnZ5fioPjK_vHeweVuLRz-2TmZmG8yolEN2orMSw018QHc-Kz17ByWWlY-EtJmaLB501qGTBvMyyviirRQoUJkCjqqaL1exkdRh/s1600/tweepy_05.png" height="312" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
実行結果&lt;/div&gt;
&lt;br /&gt;
コマンドラインで実行すると文字コードの関係で出力エラーになる場合がありますので、ここではIDLE上で実行しています。&lt;br /&gt;
テストアカウントなので、ホームらしくないですが… ＿|￣|○&lt;br /&gt;
&lt;br /&gt;
パラメータ since_id にIDを指定することで、指定ID以降のタイムラインを取得することが出来ますので、一定のタイミングで使用すればタイムラインを表示し続けることが可能ですが、ホームライムラインはリミットが15分に15回なので、頻繁にこのメソッド使うと403エラーになります。&lt;br /&gt;
初回のみhome_timelineメソッドを使い、以降はストリームを使用したほうがいいですね。&lt;br /&gt;
ストリームについては別の機会に紹介します。&lt;br /&gt;
&lt;br /&gt;
２．ユーザライムライン&lt;br /&gt;
自分以外のユーザのタイムラインを取得するには、user_timelineメソッドを使用します。&lt;br /&gt;
14行目を以下のように修正します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python first-line:14"&gt;for status in api.user_timeline(id=228949885, count=10)[::-1]:
&lt;/pre&gt;
&lt;br /&gt;
screen_nameも使用可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python first-line:14"&gt;for status in api.user_timeline(screen_name='EagleAndHorses', count=10)[::-1]:
&lt;/pre&gt;
&lt;br /&gt;
これで、指定したユーザのタイムラインを取得できます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTUtf7z1YyaH7TnB0us1FAbh4YYyBFokZCz8lh0k_IpLw3E3wsfFRnrepvI87KWvJY5rxeb9Trr0VecO3ke1XEkRTSyc00uZqLnhSe9n1RT0xqGLOrSLsigOwXXmA8yvBnKletAReiMj2L/s1600/tweepy_06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTUtf7z1YyaH7TnB0us1FAbh4YYyBFokZCz8lh0k_IpLw3E3wsfFRnrepvI87KWvJY5rxeb9Trr0VecO3ke1XEkRTSyc00uZqLnhSe9n1RT0xqGLOrSLsigOwXXmA8yvBnKletAReiMj2L/s1600/tweepy_06.png" height="320" width="302" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
実行結果&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy_14.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVE7jqZzrAE9UqRSmKCyOQty6agFsstn4AhGdiWKtDJJnZ5fioPjK_vHeweVuLRz-2TmZmG8yolEN2orMSw018QHc-Kz17ByWWlY-EtJmaLB501qGTBvMyyviirRQoUJkCjqqaL1exkdRh/s72-c/tweepy_05.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-980234819466447182</guid><pubDate>Mon, 13 Apr 2015 12:28:00 +0000</pubDate><atom:updated>2015-04-13T22:48:11.004+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">tweepy</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><category domain="http://www.blogger.com/atom/ns#">準備</category><title>tweepyライブラリを利用する (準備編)</title><description>Twitterライブラリtweepyを数回取り上げます。&lt;br /&gt;
&lt;br /&gt;
１．tweepyライブラリのインストール&lt;br /&gt;
&lt;br /&gt;
tweepyライブラリをインストールします。&lt;br /&gt;
コマンドプロンプトより、以下のコマンドでインストールできるはずです。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class="brush: python"&gt;C:\&amp;gt; easy_install tweepy

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
２．Twitter APIのアプリケーション登録&lt;br /&gt;
&lt;br /&gt;
Twitter API を利用するためには、アプリケーション登録をする必要があります。&lt;br /&gt;
以下を参考にしてください。&lt;br /&gt;
パーミッションは"Read and Write"にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://syncer.jp/twitter-api-create-application"&gt;Twitter APIで、アプリケーションを登録する方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wpbeginner.ki-blog.biz/%E3%83%96%E3%83%AD%E3%82%B0/%E3%83%AA%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%A2%E3%83%AB%E5%BE%8C%E3%81%AEtwitter%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E4%BD%9C%E6%88%90%E3%80%81%E7%99%BB%E9%8C%B2%E6%B3%95-api%E3%82%AD%E3%83%BC/"&gt;リニューアル後のTwitterアプリ作成、登録法 APIキーの取得法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
アプリケーション登録が完了しましたら、コンシューマーキー(Consumer Key)とコンシューマーシークレット(Consumer Secret)をメモしてください。&lt;br /&gt;
&lt;br /&gt;
３．アクセストークンとアクセスシークレットの取得&lt;br /&gt;
次は、ユーザと特定するためのアクセストークンとアクセスシークレットを取得します。&lt;br /&gt;
アプリケーション登録の画面で生成することも出来ますが、せっかくですので tweepyライブラリを使ってみます。&lt;br /&gt;
&lt;br /&gt;
(1) 以下のpythonプログラムをコマンドプロンプトより実行します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;import webbrowser
import tweepy

CONSUMER_KEY    = '(２で取得したコンシューマキー)'
CONSUMER_SECRET = '(２で取得したコンシューマシークレット)'

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        url = auth.get_authorization_url()

        webbrowser.open(url=url, new=1, autoraise=True)
        verifier = input('input verifier code = ')
        token , secret = auth.get_access_token(verifier)

        print('Access token = ' + token)
        print('Access secret = ' + secret)

    except tweepy.TweepError as e:
        print(e.reason)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
(2) 実行すると、ブラウザが起動し承認画面が表示されますので承認してください。 コマンドプロンプト画面はPINコード入力待ちになります。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjOcdOU6wZmFodyy5R1E0Axes95UUGia2mgXvqKXR9SEVsGHXXmbriw6Xcaocq40dA9a2W6TV8M1gS-tdF2o5_zBdr4uaTSW_iJPPrNzlbYymod6iJvGDq0HQ6rRx8ScWK92gyilk_UHGS/s1600/tweepy_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjOcdOU6wZmFodyy5R1E0Axes95UUGia2mgXvqKXR9SEVsGHXXmbriw6Xcaocq40dA9a2W6TV8M1gS-tdF2o5_zBdr4uaTSW_iJPPrNzlbYymod6iJvGDq0HQ6rRx8ScWK92gyilk_UHGS/s1600/tweepy_01.png" height="228" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
Twitter認証画面（サンプル）&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD7fAM6CLCbPvp5U-_ks_81MGdYhmbsTOH3pyrqRfALgLKMzexojuoPKH9pQwIH6bMW3DBD1PkMEwKeb_4FCBUtLXsw3A1sSXuHrVdQHf9SoSgEoHcKmMptKyL-0jkjWHrXHM3mXoARCVt/s1600/tweepy_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD7fAM6CLCbPvp5U-_ks_81MGdYhmbsTOH3pyrqRfALgLKMzexojuoPKH9pQwIH6bMW3DBD1PkMEwKeb_4FCBUtLXsw3A1sSXuHrVdQHf9SoSgEoHcKmMptKyL-0jkjWHrXHM3mXoARCVt/s1600/tweepy_03.png" height="232" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
PINコード入力待ち&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
(3) 承認すると、発行されたPINコードが表示されますので、PINコードをコピーしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwTuwueGOR2CIjZQMl16JDtxSc3zY5uJfm0gdPyAKFJrYfckw_SSmTl-RrCMPcW8QEa0cLRkDXnupLTMsv3yEAtkqLK21dO-uuF7b6ICzLDkhf9xW9CpiJt2iEkGsH2SG_OjpEj3KlJRIg/s1600/tweepy_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwTuwueGOR2CIjZQMl16JDtxSc3zY5uJfm0gdPyAKFJrYfckw_SSmTl-RrCMPcW8QEa0cLRkDXnupLTMsv3yEAtkqLK21dO-uuF7b6ICzLDkhf9xW9CpiJt2iEkGsH2SG_OjpEj3KlJRIg/s1600/tweepy_02.png" height="157" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
PINコード画面&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
(4) &amp;nbsp;コマンドプロンプト画面に戻り、先ほどコピーしたPINコードをペーストしてEnterキーを押すと、発行されたアクセストークンとアクセスシークレットが表示されますのでメモしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB_PFwZuO4sxYFB9wLETxWAq7w9k6g-HmHK_NBkPCkb-orotg0Kz-8eGfd6OITAmxpWi5pvUe_oTvT7J5l9IVz18mGZz0S0e7x-9HguUVyTz7uYrBn8xcuP1U4B_-E-HTAM3uFki-v7ayy/s1600/tweepy_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB_PFwZuO4sxYFB9wLETxWAq7w9k6g-HmHK_NBkPCkb-orotg0Kz-8eGfd6OITAmxpWi5pvUe_oTvT7J5l9IVz18mGZz0S0e7x-9HguUVyTz7uYrBn8xcuP1U4B_-E-HTAM3uFki-v7ayy/s1600/tweepy_04.png" height="232" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
PINコード入力後&lt;/div&gt;
&lt;br /&gt;
以上で準備は完了です。&lt;br /&gt;
Twitter APIでは、コンシューマーキー、コンシューマシークレット、アクセストークン、アクセスシークレットが必要になります。&lt;br /&gt;
&lt;br /&gt;
tweepyの各メソッドのパラメータは、REST APIs とほぼ同じものになっています。&lt;br /&gt;
Twitter API の仕様については、&lt;a href="https://dev.twitter.com/rest/public"&gt;Twitter Developers Documentation の REST APIs&lt;/a&gt; を参照してください。&lt;br /&gt;
&lt;br /&gt;
次回は、tweepyライブラリを使ってツイートします。&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/tweepy.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjOcdOU6wZmFodyy5R1E0Axes95UUGia2mgXvqKXR9SEVsGHXXmbriw6Xcaocq40dA9a2W6TV8M1gS-tdF2o5_zBdr4uaTSW_iJPPrNzlbYymod6iJvGDq0HQ6rRx8ScWK92gyilk_UHGS/s72-c/tweepy_01.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-1839375123615864974</guid><pubDate>Sat, 11 Apr 2015 23:56:00 +0000</pubDate><atom:updated>2015-04-12T08:56:45.728+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">GMail</category><category domain="http://www.blogger.com/atom/ns#">Mail受信</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><title>メールを受信する（IMAP編）</title><description>IMAPでのメール受信は以下のように行います。&lt;br /&gt;
&lt;br /&gt;
下の例はGMailの場合ですが、GMailでIMAPを使用する場合には、設定の「メール転送とPOP/IMAP」タブよりIMAPアクセス：「IMAPを有効にする」に変更しておく必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class="brush: python"&gt;import email
from imaplib import IMAP4_SSL
from email.header import decode_header

if __name__ == '__main__':
    adr = '&amp;lt;メールアドレス&amp;gt;'
    pwd = '&amp;lt;パスワード&amp;gt;'

    imap_host = 'imap.gmail.com'      # GMailの場合
    imap_port = 993                   # GMailの場合

    try:
        conn = IMAP4_SSL(imap_host, imap_port)
        conn.login(adr, pwd)

        num = conn.select(mailbox='INBOX', readonly=True)    # readonly=False で受信後に既読

        #typ, data = conn.search(None, 'ALL')     # 全メール
        typ, data = conn.search(None, '(UNSEEN HEADER TO %s)' % adr)    # 未読のみ
        ids = data[0].split()

        # Search from backwards
        for mid in ids[::-1]:
            typ, data = conn.fetch(mid, '(RFC822)')
            raw_email = data[0][1]
            msg = email.message_from_bytes(raw_email)

            header = decode_header(msg.get('Subject'))
            msg_subject  = header[0][0]
            msg_encoding = header[0][1] or 'iso-2022-jp'

            if msg.is_multipart() == False: # シングルパート
                byt  = bytearray(msg.get_payload(), msg_encoding)
                body = byt.decode(encoding=msg_encoding)

            else:   # マルチパート
                prt  = msg.get_payload()[0]
                byt  = prt.get_payload(decode=True)
                body = byt.decode(encoding=msg_encoding)

            print('from_address='+ str(msg.get('From')))
            print('to_addresses='+ str(msg.get('To')))
            print('cc_addresses='+ str(msg.get('CC')))
            print('bcc_addresses='+ str(msg.get('BCC')))
            print('date='+ str(msg.get('Date')))
            print('subject='+ str(msg_subject.decode(msg_encoding)))
            print('body='+ body )
            print('---------------------------------')

    except:
        raise

    finally:
        conn.close()
        conn.logout()
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
IMAP4プロトコルクライアントにIMAP4_SSLを使用します。&lt;br /&gt;
処理の流れは以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;ログイン （login）&lt;/li&gt;
&lt;li&gt;メールボックス選択 （select）&lt;/li&gt;
&lt;li&gt;メール検索 （search）&lt;/li&gt;
&lt;li&gt;メール取得 （fetch）&lt;/li&gt;
&lt;li&gt;取得したメールのデコード&lt;/li&gt;
&lt;li&gt;コンソール出力&lt;/li&gt;
&lt;li&gt;検索結果分4～6を繰り返す&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
searchメソッドの条件によって、未読や件名で絞り込む事が可能です。&lt;br /&gt;
その後、取得したIDのメールをfetchメソッドで受信します。&lt;br /&gt;
受信したメールはデコードする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/imap.html</link><author>noreply@blogger.com (すてぽん)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-8128762886943394097</guid><pubDate>Fri, 10 Apr 2015 22:48:00 +0000</pubDate><atom:updated>2015-04-11T07:48:56.218+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">microsofttranslator</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><title>microsofttranslatorライブラリを利用する (detect_language)</title><description>一週間続いた microsofttranslatorライブラリも今回で終了です♪&lt;br /&gt;
&lt;br /&gt;
指定した文字列がどんな言語か知るには「detect_language」を使います。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;from microsofttranslator import Translator
translator = Translator('(クライアントID)', '(顧客の秘密)')

translator.detect_languages('(調べる文章)')
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
成功すると指定した文章の言語が返されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqUf-PobMhuPVARFtSi63Yg7Ze9bquztAgdRNCyn9PXa3OVbuAkQyRmSVdXHeH5nG5PHdWJeYLqZtgjDpELyBpXwWLnKznccQQjXNIRgiH_1_2r7-v5rUPT897SDli5FhorF0H4NFRE3zC/s1600/azure_translator_22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqUf-PobMhuPVARFtSi63Yg7Ze9bquztAgdRNCyn9PXa3OVbuAkQyRmSVdXHeH5nG5PHdWJeYLqZtgjDpELyBpXwWLnKznccQQjXNIRgiH_1_2r7-v5rUPT897SDli5FhorF0H4NFRE3zC/s1600/azure_translator_22.png" height="156" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
結果&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/microsofttranslator-detectlanguage.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqUf-PobMhuPVARFtSi63Yg7Ze9bquztAgdRNCyn9PXa3OVbuAkQyRmSVdXHeH5nG5PHdWJeYLqZtgjDpELyBpXwWLnKznccQQjXNIRgiH_1_2r7-v5rUPT897SDli5FhorF0H4NFRE3zC/s72-c/azure_translator_22.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-3091241720738433699</guid><pubDate>Fri, 10 Apr 2015 03:55:00 +0000</pubDate><atom:updated>2015-04-10T12:55:06.404+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">microsofttranslator</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><title>microsofttranslatorライブラリを利用する (get_languages)</title><description>翻訳できる言語の一覧は「get_languagesメソッド」を使います。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;from microsofttranslator import Translator
translator = Translator('(クライアントID)', '(顧客の秘密)')

translator.get_languages()
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
成功すると翻訳できる言語のリストが返されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUmrA7ihmLjdvl9kwWJUk5gSkyAW0T0O6rqxehlrwJrSe-I5mVa8nxpnEeGw2UtN9PSuDYHHrD2h4e1OMMpGZDTJ8bn1tS2Wa9RUaIiXZwVlGlwTH1z2yvMnetxK2e1THrC7objUe9Po7w/s1600/azure_translator_21.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUmrA7ihmLjdvl9kwWJUk5gSkyAW0T0O6rqxehlrwJrSe-I5mVa8nxpnEeGw2UtN9PSuDYHHrD2h4e1OMMpGZDTJ8bn1tS2Wa9RUaIiXZwVlGlwTH1z2yvMnetxK2e1THrC7objUe9Po7w/s1600/azure_translator_21.png" height="185" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
結果&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/microsofttranslator-getlanguages.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUmrA7ihmLjdvl9kwWJUk5gSkyAW0T0O6rqxehlrwJrSe-I5mVa8nxpnEeGw2UtN9PSuDYHHrD2h4e1OMMpGZDTJ8bn1tS2Wa9RUaIiXZwVlGlwTH1z2yvMnetxK2e1THrC7objUe9Po7w/s72-c/azure_translator_21.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-5754377916110859167</guid><pubDate>Thu, 09 Apr 2015 01:14:00 +0000</pubDate><atom:updated>2015-04-09T10:14:57.183+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">microsofttranslator</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><title>microsofttranslatorライブラリを利用する (translate)</title><description>やっと、コーディングまでこぎつけることが出来ました。&lt;br /&gt;
長かったですね…&lt;br /&gt;
&lt;br /&gt;
まず、Translatorクラスをインスタンス化しますが、その際にクライアントIDと顧客の秘密を指定する必要があります。&lt;br /&gt;
そして、翻訳には「translateメソッド」を使います。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;from microsofttranslator import Translator
translator = Translator('(クライアントID)', '(顧客の秘密)')

ranslator.translate(text='(翻訳するテキスト)', to_lang='(翻訳する言語)')
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
成功すると翻訳結果が返されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXVZ6aAsZPERai6q4wEhPpN-rJAzdDIOtd5zO7LkHB3bjntLbKjjHK4tLNhJ9r6TvROqP47mEu4UFadq4u8e43krk_1dvMgKtFJqrfhdWTnCCscue9wOrdDQaYi9FtfpbqJVXm6OQUdNKK/s1600/azure_translator_19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXVZ6aAsZPERai6q4wEhPpN-rJAzdDIOtd5zO7LkHB3bjntLbKjjHK4tLNhJ9r6TvROqP47mEu4UFadq4u8e43krk_1dvMgKtFJqrfhdWTnCCscue9wOrdDQaYi9FtfpbqJVXm6OQUdNKK/s1600/azure_translator_19.png" height="173" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
結果&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
「translateメソッド」には、from_langやcontent_type、categoryなども指定できるようです。&lt;br /&gt;
翻訳する言語については、次の記事で説明します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/microsofttranslator-translate.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXVZ6aAsZPERai6q4wEhPpN-rJAzdDIOtd5zO7LkHB3bjntLbKjjHK4tLNhJ9r6TvROqP47mEu4UFadq4u8e43krk_1dvMgKtFJqrfhdWTnCCscue9wOrdDQaYi9FtfpbqJVXm6OQUdNKK/s72-c/azure_translator_19.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-2383801086134028944</guid><pubDate>Wed, 08 Apr 2015 03:28:00 +0000</pubDate><atom:updated>2015-04-08T12:28:00.256+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">microsofttranslator</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">準備</category><title>microsofttranslatorライブラリを利用する (準備編：その3)</title><description>ずいぶん長くなってしまいましたが、準備編はこれで終わりです。&lt;br /&gt;
&lt;br /&gt;
アプリケーションの登録が出来ましたら、次は「microsofttranslatorライブラリ」のインストールを行います。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
microsofttranslatorライブラリのインストール&lt;/h4&gt;
「Microsoft Translator」を利用するライブラリ「microsofttranslatorライブラリ」のインストール手順は以下の通りです。&lt;br /&gt;
&lt;br /&gt;
1.&lt;a href="https://pypi.python.org/pypi/microsofttranslator"&gt;PyPIページ&lt;/a&gt;から、「microsofttranslatorライブラリ」（2015/04/04現在バージョン0.7が最新）をダウンロードします。 自分は後述する理由から、 easy_install を使用してのインストールを行いませんでした。&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl4vhQOuW-p3GmvNVvqMrA5G3dcNUCziaYmGISgww-xdLIYlj2IdcDV_OieD_00rvu5E_K9BNVZE6lGypyPO5y8-389ZnoUZn1Ikyl0DjTzyLwA_Nehz51Gyxi78PPfwsB8qXMotDnoMcV/s1600/azure_translator_14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl4vhQOuW-p3GmvNVvqMrA5G3dcNUCziaYmGISgww-xdLIYlj2IdcDV_OieD_00rvu5E_K9BNVZE6lGypyPO5y8-389ZnoUZn1Ikyl0DjTzyLwA_Nehz51Gyxi78PPfwsB8qXMotDnoMcV/s1600/azure_translator_14.png" height="194" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
2.ダウンロードした「microsofttranslatorライブラリ」を展開して、コマンドラインからインストールを行いますが、自分の環境では何故かエラーになりました。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvDi2JTDpRokXFif23rBPZrslKroqeguw1DJX5di9hfKBEaqp91bKieWF8eSL6Ovujff2cRisrGeRNTgusALO48jV1OLYcTfMsbMOYqjIjvJMAnxb8IrEqxqOgg55xRsvJ6O73n0ahAcnB/s1600/azure_translator_15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvDi2JTDpRokXFif23rBPZrslKroqeguw1DJX5di9hfKBEaqp91bKieWF8eSL6Ovujff2cRisrGeRNTgusALO48jV1OLYcTfMsbMOYqjIjvJMAnxb8IrEqxqOgg55xRsvJ6O73n0ahAcnB/s1600/azure_translator_15.png" height="232" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
3.エディタ(メモ帳)で「setup.py」のエラー箇所(この場合44行目)に「, encoding='utf-8'」を追加します。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBBc0LMCQdK-yD0GWZedt3oc9YKAaT5nHUFF169TckBw0Wv9Epo_W_6mVt24AvJ2RKcETyV_tv_duOP1ToXVPiU6u2lD89p7sj9T6J2a-VMkcY0GWjq0niUWj42sASquaIWzWkRLv_9XdO/s1600/azure_translator_16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBBc0LMCQdK-yD0GWZedt3oc9YKAaT5nHUFF169TckBw0Wv9Epo_W_6mVt24AvJ2RKcETyV_tv_duOP1ToXVPiU6u2lD89p7sj9T6J2a-VMkcY0GWjq0niUWj42sASquaIWzWkRLv_9XdO/s1600/azure_translator_16.png" height="121" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
変更前&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvUA78PFJObTn9anpM8CESAXpK6iq6U3_UdkXxzCFfnxf-jz5yfXDlzl45oZoB_R0m-_knVwE49t_lGRtqNO2Mu517Z8lD0TAlGBgGckRrlmzXHL34QC7knNX9tUKH8irKoqCqRDnaXCGQ/s1600/azure_translator_17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvUA78PFJObTn9anpM8CESAXpK6iq6U3_UdkXxzCFfnxf-jz5yfXDlzl45oZoB_R0m-_knVwE49t_lGRtqNO2Mu517Z8lD0TAlGBgGckRrlmzXHL34QC7knNX9tUKH8irKoqCqRDnaXCGQ/s1600/azure_translator_17.png" height="122" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
変更後&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
4.再度コマンドラインからインストールを行います。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5C-9pobuRndDRQTwam4pDoUoBTM1I-ixVQFnO4sRMA-d7MG3IUzD3OK93amAlPqCDgGBbeSa897hTW4Zk-khp43NjC9RZwsLG-pSUSA1Rm7nnB3-ITPPaS84doAOcLoGVZtkrOysit9PG/s1600/azure_translator_18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5C-9pobuRndDRQTwam4pDoUoBTM1I-ixVQFnO4sRMA-d7MG3IUzD3OK93amAlPqCDgGBbeSa897hTW4Zk-khp43NjC9RZwsLG-pSUSA1Rm7nnB3-ITPPaS84doAOcLoGVZtkrOysit9PG/s1600/azure_translator_18.png" height="215" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
5.「import microsofttranslator」を実行してエラーがでなければ成功です。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQj26n6C0ixo6mykEhRz9-yfiK5cFqmE5zIxTiAjL2E5z-qMkI6Kw4iPcXZyHBw4RmFRHEUxxgqX2RAvtRItFY3PkgaybDgVO70ocB6jN_hC3oQKUv9EGU-PhpwcfCLrFmVXB2r2oP6sr2/s1600/azure_translator_20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQj26n6C0ixo6mykEhRz9-yfiK5cFqmE5zIxTiAjL2E5z-qMkI6Kw4iPcXZyHBw4RmFRHEUxxgqX2RAvtRItFY3PkgaybDgVO70ocB6jN_hC3oQKUv9EGU-PhpwcfCLrFmVXB2r2oP6sr2/s1600/azure_translator_20.png" height="213" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これで「microsofttranslatorライブラリ」のインストールは終了です。&lt;br /&gt;
次回は実際に使ってみます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/microsofttranslator-3.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl4vhQOuW-p3GmvNVvqMrA5G3dcNUCziaYmGISgww-xdLIYlj2IdcDV_OieD_00rvu5E_K9BNVZE6lGypyPO5y8-389ZnoUZn1Ikyl0DjTzyLwA_Nehz51Gyxi78PPfwsB8qXMotDnoMcV/s72-c/azure_translator_14.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-6450447238033826741</guid><pubDate>Tue, 07 Apr 2015 06:29:00 +0000</pubDate><atom:updated>2015-04-07T15:29:13.021+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">microsofttranslator</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">準備</category><title>microsofttranslatorライブラリを利用する (準備編：その2)</title><description>Microsoft Azure の準備が出来ましたら、次はアプリケーションの登録を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
アプリケーション登録&lt;/h4&gt;
MARKETPLACEで購入したMicrosoft Translator を利用するためには、アプリケーション登録が必要になります。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
1.&lt;a href="http://www.bing.com/translator/Default.aspx?MKT=ja-JP"&gt;「Bing 翻訳」のページ&lt;/a&gt;から、「開発者」をクリックします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvZXqtr9n4m8_mNR8zKwvE1J2Qh-H6eqTGV6HMkeQvyw9MX926DWhrx5CAkCm0RvQgMSZnkEgGK-Ox42MMpChuGrgfmkTQkTILPa_zS5nU0NHdMR_tdR7uIauPPrgUCNLL3yF2Bjuwbnvp/s1600/azure_translator_07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvZXqtr9n4m8_mNR8zKwvE1J2Qh-H6eqTGV6HMkeQvyw9MX926DWhrx5CAkCm0RvQgMSZnkEgGK-Ox42MMpChuGrgfmkTQkTILPa_zS5nU0NHdMR_tdR7uIauPPrgUCNLL3yF2Bjuwbnvp/s1600/azure_translator_07.png" height="192" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
2.&lt;a href="http://www.microsoft.com/translator/api.aspx"&gt;「Microsoft Translator」のページ&lt;/a&gt;が表示されますので、「Get Started」をクリックします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAIWJSjW-C29GnPGuDwItQBhJBNI9ymVw5QTM52eiNMWUkca9iqwE09dOXcd_sjwiFkAVZZXiIjKJSaXdiuAW_RXwUoqZpCifmuMkxwUx_pDyIPMMPsvl2lomkCeit_k8mgHln-a4axRWn/s1600/azure_translator_08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAIWJSjW-C29GnPGuDwItQBhJBNI9ymVw5QTM52eiNMWUkca9iqwE09dOXcd_sjwiFkAVZZXiIjKJSaXdiuAW_RXwUoqZpCifmuMkxwUx_pDyIPMMPsvl2lomkCeit_k8mgHln-a4axRWn/s1600/azure_translator_08.png" height="177" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
3.&lt;a href="http://www.microsoft.com/translator/get-started.aspx"&gt;「Get started using the Translator API」というページ&lt;/a&gt;が表示されます。 このページに、「Microsoft Translator」の利用方法の手順が記載されているのですが、すでに「(1) Setup for Microsoft Translator」は済んでいますので、「(2) Register your application and create your credentials.」をクリックしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbPWJN3QN_qeul5E_LFfcfMahPiPceDsTyL4g2qiIMQwCFBjNh3FKFJToALj0FXbJ-aG0Y1eQ_j7tCXMucx1SIpCkuOWC1PdgHuf0dM_Bk096vs_5AwPYmmizEd5Vr-43l9DmIdsaSDy3z/s1600/azure_translator_09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbPWJN3QN_qeul5E_LFfcfMahPiPceDsTyL4g2qiIMQwCFBjNh3FKFJToALj0FXbJ-aG0Y1eQ_j7tCXMucx1SIpCkuOWC1PdgHuf0dM_Bk096vs_5AwPYmmizEd5Vr-43l9DmIdsaSDy3z/s1600/azure_translator_09.png" height="261" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
4.「Microsoft Azure Marketplace」のログイン画面が表示されたらログインしてください。　ログイン済み場合は、次のステップに進んでください。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhun2DUEWpU36RlOa-hyZnIHicsYzuqOVAt4_AT93yTQ0PEoLVi1e4acwm2rD547mw0USs67jPVgYQSAk3nWqwF1Y_vlUMdnv0iliG4KqHYXKhN3ISs9ktIeEYMG78gJMTnYEB9J1kd7Ngv/s1600/azure_translator_10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhun2DUEWpU36RlOa-hyZnIHicsYzuqOVAt4_AT93yTQ0PEoLVi1e4acwm2rD547mw0USs67jPVgYQSAk3nWqwF1Y_vlUMdnv0iliG4KqHYXKhN3ISs9ktIeEYMG78gJMTnYEB9J1kd7Ngv/s1600/azure_translator_10.png" height="181" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
5.「Microsoft Azure Marketplace」へのログオンを行うと、「開発者」画面が表示されますので、登録ボタンをクリックします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlb0PmtMJIDOfaTTuEk0y2aTayXMiLe2GQcQE1ZEXF9N14MphWuCu64UzwWMN9YPuXWGXe7_rr2RMujj3VORbUR0hG0wPXxD8JAt13TP2jiFlnWD04gNgEWSY9FQoEv3hUCBHGsb41iL10/s1600/azure_translator_11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlb0PmtMJIDOfaTTuEk0y2aTayXMiLe2GQcQE1ZEXF9N14MphWuCu64UzwWMN9YPuXWGXe7_rr2RMujj3VORbUR0hG0wPXxD8JAt13TP2jiFlnWD04gNgEWSY9FQoEv3hUCBHGsb41iL10/s1600/azure_translator_11.png" height="212" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
6.「アプリケーション登録」画面が表示されますので、「クライアントID」「名前」「リダイレクトURI」を入力して、「作成」をクリックします。 この際、「顧客の秘密」は自動で入力されますので、変更の必要はありません。　（「Microsodt Translator」では「リダイレクトURI」は利用しませんが、入力が必要のようです。 適当なURIを入力しましょう）&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;※ここで入力する「クライアントID」と「顧客の秘密」は、microsofttranslatorライブラリを使用するときに必要になりますので、メモしてください。&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRutULIHs22_VTAKV3y3c6QAOYHSM5B4M2eA2o2BebyhnqYDYne-aMB5Rf2_LMiEyk3yZdcOnBnuCcCJzYUc2A2WGvYWwKVK1ikdrQ_HDmE7hhO1fc7CGGJyR4XHu2r7C6G-_0gScmrlfo/s1600/azure_translator_12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRutULIHs22_VTAKV3y3c6QAOYHSM5B4M2eA2o2BebyhnqYDYne-aMB5Rf2_LMiEyk3yZdcOnBnuCcCJzYUc2A2WGvYWwKVK1ikdrQ_HDmE7hhO1fc7CGGJyR4XHu2r7C6G-_0gScmrlfo/s1600/azure_translator_12.png" height="227" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
7.「開発者」画面が表示され、「登録されたアプリケーション」に先ほど登録した内容が表示されれば成功です。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7r2C3DEdKjRMW1PbxEQydTvQ1NQGW8bnq2AY_Tj1BQB6RplAhQimgG2nbRETD7HtjtFrD7PGd-KMwAlldpCEjx0chjwRlgHQofBbRRzt9Iyako6ej9GBAh_aaXYcgv3393LPldA9ubIHs/s1600/azure_translator_13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7r2C3DEdKjRMW1PbxEQydTvQ1NQGW8bnq2AY_Tj1BQB6RplAhQimgG2nbRETD7HtjtFrD7PGd-KMwAlldpCEjx0chjwRlgHQofBbRRzt9Iyako6ej9GBAh_aaXYcgv3393LPldA9ubIHs/s1600/azure_translator_13.png" height="211" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
これでアプリケーション登録は完了です。&lt;br /&gt;
続いてPythonにmicrosofttranslatorライブラリのインストールを行いますが、「microsofttranslatorライブラリを利用する (準備編：その3)」で紹介します。&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/microsofttranslator-2.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvZXqtr9n4m8_mNR8zKwvE1J2Qh-H6eqTGV6HMkeQvyw9MX926DWhrx5CAkCm0RvQgMSZnkEgGK-Ox42MMpChuGrgfmkTQkTILPa_zS5nU0NHdMR_tdR7uIauPPrgUCNLL3yF2Bjuwbnvp/s72-c/azure_translator_07.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-8406531568404234850</guid><pubDate>Mon, 06 Apr 2015 03:43:00 +0000</pubDate><atom:updated>2015-04-06T20:25:25.990+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">microsofttranslator</category><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">準備</category><title>microsofttranslatorライブラリを利用する (準備編：その1)</title><description>Microsoft Translator API をpython3を利用した時のメモです。&lt;br /&gt;
&lt;br /&gt;
ライブラリは&lt;a href="https://pypi.python.org/pypi/microsofttranslator" target="_blank"&gt;&lt;u&gt;&lt;strong&gt;microsofttranslator&lt;/strong&gt;&lt;/u&gt;&lt;/a&gt; を使用します。&lt;br /&gt;
&lt;br /&gt;
環境は以下の通り。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;バージョン：Python 3.4&lt;/li&gt;
&lt;li&gt;OS：Windows7&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h4&gt;
Microsoft Azure アカウントの取得&lt;/h4&gt;
利用するためにはMicrosoft Azure のアカウントが必要です。&lt;br /&gt;
無料評価版がありますので、&lt;a href="http://kikutaro777.hatenablog.com/entry/2014/01/03/025126" target="_blank"&gt;&lt;strong&gt;&lt;u&gt;ここ&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt;を参考にしてください。&lt;br /&gt;
(アカウント作成まででOKです)&lt;br /&gt;
&lt;br /&gt;
しかし、無料でもクレジットカードの入力を求められるのはイヤですねぇ…&lt;br /&gt;
個人の特定を行うためとか書いてありましたが、もう少し他の方法もあるんではないかと思いますが、欧米ではこれが当たり前なのでしょうか？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
MARKETPLACEの購入&lt;/h4&gt;
アカウントが作成できたら、MARKETPLACEから Microsoft Translator API を購入します。&lt;br /&gt;
&lt;br /&gt;
1.ダッシュボードの左下の「+新規」をクリックします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-RWztew9-kEbHpmiu8k85nZxYXGtc9TTWwVYXd-9IxvWp6fOD6nSkvim1HUykA_fj38fpCIoUCid_Ni6Zbw5v8y8YX3WKCEb3SlKYlRmTLX-nHBShTGqeyv8ud68vq6TXwnM2go0Qxl-t/s1600/azure_translator_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-RWztew9-kEbHpmiu8k85nZxYXGtc9TTWwVYXd-9IxvWp6fOD6nSkvim1HUykA_fj38fpCIoUCid_Ni6Zbw5v8y8YX3WKCEb3SlKYlRmTLX-nHBShTGqeyv8ud68vq6TXwnM2go0Qxl-t/s1600/azure_translator_01.png" height="199" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
2.「+新規」の画面が表示されたら、左側の一覧より「MARKETPLACE」をクリックします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIH69shFXcXo1a-zoToOvzKueLA2DoUe8Wk-kCqg8ngr9u1sD_6jxFISygcNAhh8n13Db0Wy-A2PIHcs82BVIQgIGsDMVsTkh5qlLER1goRuyA6Lu2Z7CqhAVBTFJ25wUWVV1HGye6Tvd/s1600/azure_translator_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIH69shFXcXo1a-zoToOvzKueLA2DoUe8Wk-kCqg8ngr9u1sD_6jxFISygcNAhh8n13Db0Wy-A2PIHcs82BVIQgIGsDMVsTkh5qlLER1goRuyA6Lu2Z7CqhAVBTFJ25wUWVV1HGye6Tvd/s1600/azure_translator_02.png" height="197" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
3.「アプリケーションとサービスの選択」画面が表示されたら、「Microsoft Translator」を選択し、右下の「→」をクリックします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKT-ACrbAcdLXBey4ha8Ji2_SIGviaYALtg8fPaeVhJAgmedv3vZkm-2hWD3fY2wCdQJD8ujxtdI_D32msL_mNGGoANEdUjkU2R4PKS3vfkjl99KncTdLQayDNU3DIDiShSOpFl0tMKouy/s1600/azure_translator_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKT-ACrbAcdLXBey4ha8Ji2_SIGviaYALtg8fPaeVhJAgmedv3vZkm-2hWD3fY2wCdQJD8ujxtdI_D32msL_mNGGoANEdUjkU2R4PKS3vfkjl99KncTdLQayDNU3DIDiShSOpFl0tMKouy/s1600/azure_translator_03.png" height="205" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
4.「アプリケーションとサービスの個人用設定」画面が表示されたら、「プラン」と「名前」と「地域」を選択し、右下の「→」をクリックします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9PjDanWH3OLTLAfNCmeym3YBXq0MPvoi-21rs-cQrI7KVoBmozpPDAsvDFqZMc2ZigTf1GiNNAiIubLtN57u5ZbRD8teLvyTfU1ZdOQ2pB84FAVAa81RkcUXeGDYv6rdp3IDELrXr6DFF/s1600/azure_translator_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9PjDanWH3OLTLAfNCmeym3YBXq0MPvoi-21rs-cQrI7KVoBmozpPDAsvDFqZMc2ZigTf1GiNNAiIubLtN57u5ZbRD8teLvyTfU1ZdOQ2pB84FAVAa81RkcUXeGDYv6rdp3IDELrXr6DFF/s1600/azure_translator_04.png" height="204" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
5.「購入の確認」画面が表示されたら、右下の「購入」をクリックする。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9q0LruYEwDlLSt1ojwwYkgzlWGa33kJUzebT4MI10FqmhvJhD5y3wdTKCAQjfObTtM9dAi5SgFSc2zK4Q9Azm3imcfteXrJvyRL0qeaECQ-De8xmq_5ct-HQhbw2r1-xIU8MjNYAIQ48w/s1600/azure_translator_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9q0LruYEwDlLSt1ojwwYkgzlWGa33kJUzebT4MI10FqmhvJhD5y3wdTKCAQjfObTtM9dAi5SgFSc2zK4Q9Azm3imcfteXrJvyRL0qeaECQ-De8xmq_5ct-HQhbw2r1-xIU8MjNYAIQ48w/s1600/azure_translator_05.png" height="205" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
6.ダッシュボードに購入した「Microsoft Translator」が表示されますが、状態が「開始済み」になるまで多少時間がかかります。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEVP-rp-FA71V0UCtmcD1oO6lHXIfm3glgJpchLE5azfGoys3q_nE47cNdOWC2ySVJiwRHzmrjzoloWegJPf6JwEhWOZq4wTMeWttBd-Y5CtOQKwdZUcAi0jlv3JsmRx0zm77rlmu27myi/s1600/azure_translator_06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEVP-rp-FA71V0UCtmcD1oO6lHXIfm3glgJpchLE5azfGoys3q_nE47cNdOWC2ySVJiwRHzmrjzoloWegJPf6JwEhWOZq4wTMeWttBd-Y5CtOQKwdZUcAi0jlv3JsmRx0zm77rlmu27myi/s1600/azure_translator_06.png" height="209" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これでAzureでの準備は完了です。&lt;br /&gt;
続いてアプリケーション登録を行う必要がありますが、「microsofttranslatorライブラリを利用する (準備編：その2)」で紹介します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://sutepon.blogspot.com/2015/04/microsofttranslator-1.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-RWztew9-kEbHpmiu8k85nZxYXGtc9TTWwVYXd-9IxvWp6fOD6nSkvim1HUykA_fj38fpCIoUCid_Ni6Zbw5v8y8YX3WKCEb3SlKYlRmTLX-nHBShTGqeyv8ud68vq6TXwnM2go0Qxl-t/s72-c/azure_translator_01.png" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-7366804806372039889</guid><pubDate>Sun, 05 Apr 2015 11:24:00 +0000</pubDate><atom:updated>2015-04-05T20:24:48.028+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>辞書キーの列挙 (その2)</title><description>辞書のキーを forの要素とする場合は、 辞書を直接指定してもOK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;dic = {1:'Apple', 2:'Orange', 3:'Pineapple'}
for key in dic:
    print(key)
&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7QkiOPpoFfbDm8AuJ7Q7YCJlFhyphenhyphenlqVYy2cUg57lzRZm2Wj8_N8dzGIO3X0i3Fp1raGDZ9RdFyv_iYnfna9nULi8wX3g5HMsMapaJ9YGYctxl7fYDAuiMbihBkEL6gSp9c6aoVBvtMT04f/s1600-h/dic.keys.2%25255B2%25255D.png"&gt;&lt;img alt="dic.keys.2" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgacyjYVMfiM958st2CzJe1QEVdmzBt5YUQdR7WgH1JIGnoZfJ-pjVEkmFmonTtwwWeyE_nmih-P0hXQz4nn6LCbmzlTp6q1TTQevUWIsXQCcYmKczqq4DvYxRlqf_0JwKYSxlnzL7VWotO/?imgmax=800" height="140" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="dic.keys.2" width="244" /&gt;&lt;/a&gt;</description><link>http://sutepon.blogspot.com/2015/04/2.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgacyjYVMfiM958st2CzJe1QEVdmzBt5YUQdR7WgH1JIGnoZfJ-pjVEkmFmonTtwwWeyE_nmih-P0hXQz4nn6LCbmzlTp6q1TTQevUWIsXQCcYmKczqq4DvYxRlqf_0JwKYSxlnzL7VWotO/s72-c?imgmax=800" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5539236908252281049.post-4083803729399582010</guid><pubDate>Sun, 05 Apr 2015 06:27:00 +0000</pubDate><atom:updated>2015-04-05T15:27:33.384+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python3</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>辞書キーの列挙 (その１)</title><description>辞書のキーを列挙する場合 dict.keys を使う。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: python"&gt;[dictionary].keys()
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
結果：&lt;br /&gt;
・キーリストが返される。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuR0riRrWJZVnTQDOahpjxqDd2DzBWqp8qgkz4huNEIV8JMYuVWmCQco2ca8JG2OBXPf4IMq8_X5oHr2aut4SyDKV9AtNZcwvOe3DniOLhyphenhyphensG2bYcUO0IC9Vblxq81_V9gGveLl03-elQD/s1600-h/dic.keys%25255B2%25255D.png"&gt;&lt;img alt="dic.keys" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1tn1HrMvozzLfSbsJn286fpOYAAxHCD0PEmHYLeviKykZLdF1MEkv4qsOXcD4YWmDUsjX1kOR9DEGmNOKLQ0aH7zEoyVElzuSWna0_W1kETDmBoYGlz-CzqX0fM5-J-jQuc6ISEt3s0xE/?imgmax=800" height="129" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="dic.keys" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
結果</description><link>http://sutepon.blogspot.com/2015/04/blog-post_12.html</link><author>noreply@blogger.com (すてぽん)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1tn1HrMvozzLfSbsJn286fpOYAAxHCD0PEmHYLeviKykZLdF1MEkv4qsOXcD4YWmDUsjX1kOR9DEGmNOKLQ0aH7zEoyVElzuSWna0_W1kETDmBoYGlz-CzqX0fM5-J-jQuc6ISEt3s0xE/s72-c?imgmax=800" width="72"/></item></channel></rss>