32nd TwitterIrcGateway

2009-11-13

接頭辞によってポスト先を変えるスクリプト

23:39

例によって Configs/${User}/Scripts の下に 90post_33.py のような名前で入れます。

# -*- coding: utf-8 -*-
# vim: fileencoding=utf-8
# vi:set ts=4 sw=4:

import urllib, urllib2
import time, sys, re
import clr
sys.path.append('/usr/lib/python2.5')
import commands

def OnPreSendUpdateStatus(sender, e):
	status = e.Text
	skip = re.match('^([Dd]\s+|@[_a-zA-Z0-9]+).*$', status)
	if skip:
		return
	match = re.match('^33\s+(.*)', status)
	if not match:
		return
	status = match.group(1)
	user = "takano33"
	password = "passphrase"

 	cmd = "wget -O - --user=%s --password=%s " \
 	    "--post-data='status=%s&source=TwitterIrcGateway' " \
 	    "http://twitter.com/statuses/update.xml" % \
 	    (user, password, urllib.quote_plus(status.encode('utf-8')))
 	result = commands.getoutput(cmd)
	e.Text = "D " #None

Session.PreSendUpdateStatus += OnPreSendUpdateStatus

re.match のなかの正規表現でアカウント投稿用プレフィックスを指定します。この例では "33" が先頭にあるときに機能します。

"user = ..." の部分と "password = ..." の部分をアカウントにあわせて書き換えて下さい。

この場合は "33 hoge" と入力すると @takano33 が "hoge" と発言します。

テクニカルというか、バッドノウハウとしては、"D " をついったーに送信するとなにもしないので、それで発言をキャンセルしているというあたりですかね。

urllib2 import して使ってないのとかははじめ使おうと思ったんですが、 IronPython 起因らしき文字コードエラーみたいなのがでて、ローカルで Python 2.5 あたりでは動く部分的なコードがどーしてもうごかんかったからですわ。

TwitterIrcGatewayの方の処理は重くしてもクライアントからは非同期にみえるので、無意味なほど重い処理を入れてもストレスにはなりませんね。地球にはやさしくないと思います。

YeumbeulYeumbeul2012/06/28 05:23This is cysrtal clear. Thanks for taking the time!

fbetaidpncdfbetaidpncd2012/06/29 04:08cX8JTu <a href="http://yeolqrtdurgw.com/">yeolqrtdurgw</a>

dpdhfnytdpdhfnyt2012/06/29 15:13OORKGr , [url=http://wlkhzhnuakoo.com/]wlkhzhnuakoo[/url], [link=http://eywvprczroep.com/]eywvprczroep[/link], http://bsmqxxrzwete.com/

zxcxunnkgnzxcxunnkgn2012/07/01 00:54TctFOR <a href="http://eeplyjnvqalo.com/">eeplyjnvqalo</a>

2009-10-15

Shell Context

15:50

書いてみた。

# shell.py
import sys
sys.path.append('/usr/lib/python2.5')
import clr
import re
import thread
import time
import commands

import Misuzilla.Applications.TwitterIrcGateway
import Misuzilla.Applications.TwitterIrcGateway.AddIns
import Misuzilla.Applications.TwitterIrcGateway.AddIns.Console

from System import *
from System.Threading import Thread, ThreadStart
from System.Diagnostics import Trace
from System.Collections.Generic import *
from Misuzilla.Applications.TwitterIrcGateway import Status, Statuses, User, Users, Utility
from Misuzilla.Applications.TwitterIrcGateway.AddIns import IConfiguration
from Misuzilla.Applications.TwitterIrcGateway.AddIns.Console import ConsoleAddIn, Console, Context
from Misuzilla.Applications.TwitterIrcGateway.AddIns.DLRIntegration import DLRIntegrationAddIn, DLRBasicConfiguration, DLRContextHelper

class ShellContext(Context):
        def Initialize(self):
                self.suffix = Shell.instance()
                self.config = DLRBasicConfiguration(self.CurrentSession, "ShellContext", Dictionary[String,String]({ "Shell": "シェル"}))
                pass

        def GetCommands(self):
                dict = Context.GetCommands(self)
                dict["SH"] = "指定したシェルコマンドを実行します。"
                return dict

        def OnUninitialize(self):
                pass

        def get_Configurations(self):
                return Array[IConfiguration]([ self.config ])

        # Implementation
        def SH(self, args):
                cmd = args or ""
                self.Console.NotifyMessage("入力されたコマンドは '%s' です。" % cmd)
                out = commands.getoutput(cmd)
                self.Console.NotifyMessage(out)

class Shell(Object):
        @classmethod
        def instance(klass):
                if not hasattr(klass, 'instance_'):
                        klass.instance_ = Shell()
                return klass.instance_
        
        def __init__(self):
                # 普通の #Console にコンテキストを追加する
                CurrentSession.AddInManager.GetAddIn[ConsoleAddIn]().RegisterContext(DLRContextHelper.Wrap(CurrentSession, "ShellContext", ShellContext), "Shell", "Shell")
                self.config = DLRBasicConfiguration(CurrentSession, "ShellContext", Dictionary[String,String]({ "Shell": "シェル" }))

shell = Shell.instance()

対話的にやりとりするものや、cursesとか使ってるものは動かしたらどうなるのかわからんね。hehehe

wgetするときは悪いことは言わんから wget -nv にしておけ。

書いてから Shell Context ではなくて、 Command Context だろ、と気づいた。Shell Contextにするパッチ募集中。

LiendaLienda2012/03/29 10:33salam rastesh man iran zegnedi nemikonam ama az sait shoma kheyli khosham oomade omidvaram movafagh bashid. []ریحانه کُجوری پاسخ داده در مرداد ۱۶م, ۱۳۸۹ ۱۲:۳۲ ق.ظ:سلامخوب به سلامتی انگار داره این زنگ قلاب بافی ما بین المللی میشه!‌ الحمدلله سلامت باشید. ممنون[]

hlbobbrbwahlbobbrbwa2012/03/30 15:384NySKD , [url=http://otpndhwzopeg.com/]otpndhwzopeg[/url], [link=http://ygbssoobvgia.com/]ygbssoobvgia[/link], http://vszwhjagewgr.com/

aecrrpuocnbaecrrpuocnb2012/03/31 21:27KVVkAu , [url=http://qivynbvamocs.com/]qivynbvamocs[/url], [link=http://wekvqupvxjpj.com/]wekvqupvxjpj[/link], http://rgdmqgcrylgc.com/

2009-06-26

typablemap2.pyとして導入

12:19

http://d.hatena.ne.jp/syonbori_tech/20090623/1245757607

便利です。

もっともっと拡張するユーザが現れるとよいですね。

2009-05-12

マルチキャストデリゲートを初期化できない

19:53

「○○できない」とかネガティブなエントリばかりでアレなんですが・・・

DLRの拡張で以前は以下のようにして処理を追加していました。

Session.PostSendUpdateStatus += OnPostSendUpdateStatus

ところが、2.0のリリースあたりからReloadするたびにマルチキャストのデリゲートがReloadした回数だけ繰り返されるようになってしまいました。

Session.PostSendUpdateStatus = []

というコードを00init.pyで実行しようとしましたが、PostSendUpdateStatusはReadOnlyですよ、と怒られてしまいました。

みなさんはどのように処理を追加していますか?何かよい方法があれば教えてください。

takano32takano322009/05/12 20:04disconnectすると直ります。Reloadでも初期化するにはどうしたらいいんだろう。

takano32takano322009/05/13 11:00解決編 http://twitterircgateway.g.hatena.ne.jp/mayuki/20090512/1242134503

CarlozCarloz2012/06/28 07:13The genius store caelld, they're running out of you.

ydkuhnpizjydkuhnpizj2012/06/29 04:20Sfl42B <a href="http://dufolomwyuue.com/">dufolomwyuue</a>

bskgylbskgyl2012/06/29 15:254dhWd1 , [url=http://ldtvmwqsllez.com/]ldtvmwqsllez[/url], [link=http://cypuqpkwmpmu.com/]cypuqpkwmpmu[/link], http://raxdyxyupwvq.com/

jgvpstjgvpst2012/07/01 06:01wWdtbv , [url=http://htljapdgbfwm.com/]htljapdgbfwm[/url], [link=http://mihqqwaqukgl.com/]mihqqwaqukgl[/link], http://ubcwlkqkmezf.com/

2009-05-07

言語設定を日本語にするとscraping.pyが正常に動作しない

19:07

Twitterのインターフェイスが若干変わり、言語設定を日本語にしていると scraping.py にて、re_sourceインスタンス変数に格納されている正規表現でのマッチに失敗し、スクレイピングに失敗します。

今回の修正で "span> from Hoge" などとなっていた部分が "Hoge で" と書き換わっているためです。

対応するために re_source を書き換えることも考えられましたが、今後の日本語の文言がどうなるか動向をエスパーできるほどの超人ではないので、おとなしく言語設定を英語にしたら正常にこんにちはこんにちはしている模様です。

scraping.py を使用されている方は参考になれば。

HarrhdHarrhd2012/06/28 03:55I want to send you an award for most helpful internet wirter.

dlzjivyndlzjivyn2012/06/28 13:52JWWWdE <a href="http://ycosbfgubpjt.com/">ycosbfgubpjt</a>

dmltfnrdmltfnr2012/07/01 00:4429L2M1 <a href="http://qahqtdybtzia.com/">qahqtdybtzia</a>

lreuiyyudlreuiyyud2012/07/01 05:39SSyEck , [url=http://mcgmteuxjaje.com/]mcgmteuxjaje[/url], [link=http://plsfcpxtplbw.com/]plsfcpxtplbw[/link], http://quudlhigdadf.com/