読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

urljoinでURL文字列の細工をする

python

urljoinはURL文字列を細工する関数です。
同一ドメイン上のページを行ったり来たりする用途なんかには向いてるかも知れませんね。

公式リファレンスでは以下のように紹介されています。

“基底 URL”(base)と別のURL(url)を組み合わせて、完全な URL (“絶対 URL”) を構成します。

実際のところ

ParseResultで言う処の、pathに相当する部分を差し替えることができます。

from urllib.parse import urljoin

url = "https://ja.wikipedia.org/wiki/宇奈月温泉"
res2 = urljoin(url, "/wiki/ファイル:Pcs34560_IMG4098.JPG")

print(url)
print(res2)

実行してみるとこんな感じ

$ python url.py 
https://ja.wikipedia.org/wiki/宇奈月温泉
https://ja.wikipedia.org/wiki/ファイル:Pcs34560_IMG4098.JPG

標準添付ライブラリ「urlparse」でURLのパースをする

python

標準添付ライブラリ「urlparse」でURLのパースをする

実際のところ

このブログの前回の記事をパースする方法はこんな感じ

from urllib.parse import urlparse
url = "http://shuzo-kino.hateblo.jp/entry/2016/08/28/191704"
result = urlparse(url)
result
#>>ParseResult(scheme='http', netloc='shuzo-kino.hateblo.jp', path='/entry/2016/08/28/191704', params='', query='', fragment='')

python-twitterでbotフォロー用新アカウントに情報を流し込む

python

先月書いた記事の続きです。ようやく着手できました……。
shuzo-kino.hateblo.jp

私はbotやニュース系を一つのリストに突っ込んで時間の有る時に流し見するような使い方をします。

実際のところ

from __future__ import print_function
import twitter

twit_info = {'CONSUMER_KEY':'XXX',
             'CONSUMER_SECRET':'YYY',
             'ACCESS_TOKEN':'ZZZ',
             'ACCESS_TOKEN_SECRET':'000'}

# APIのインスタンスをつくる
api = twitter.Api(consumer_key=twit_info['CONSUMER_KEY'],
                  consumer_secret=twit_info['CONSUMER_SECRET'],
                  access_token_key=twit_info['ACCESS_TOKEN'],
                  access_token_secret=twit_info['ACCESS_TOKEN_SECRET'])

# フォローしたいアカウントID。
# 既存リストから作りたい場合は以下の記事参照
# http://shuzo-kino.hateblo.jp/entry/2016/07/20/225345
val = ['mikata_no_kiti', ..., 'comic_natalie']

for x in val:
  api.CreateFriendship(screen_name=x)

result = api.GetFriends()
print([u.name for u in result])

上手く行けば、フォローしたアカウント名がズラズラと出てきます。

['コミックナタリー', ... ,'アストラギウス銀河を二分するbot'] 

Google Driveにアップロードしたファイルが勝手に独自形式にされる事を防ぐ

google

Google Driveにアップロードしたファイルが勝手に独自形式にされる事を防ぐ方法です。
最近導入した人はデフォでオンになってるみたいですね。

まずはGoogle Driveのページを起動。
右上にある歯車のアイコンをクリックし
f:id:shuzo_kino:20160827145200p:plain
設定をクリック
f:id:shuzo_kino:20160827145322p:plain
出てきた画面の内、「アップロードされたファイルを……」についてるチェックを取り外す。
f:id:shuzo_kino:20160827145345p:plain

以上です。

イテレータを手動で回していく

python

Pythonでも、イテレータを手動で回していく事ができます。

実際のところ

フツーにまわしていくだけなら、延々と組み込み関数next()をブン回していくだけ。
最後はStopIterationを吐いて停止。

val = (x for x in range(1,10))
next(val)
#>> 1
next(val)
#>> 2
next(val)
#>> 3
next(val)
#...
#>>9
next(val)
#>Traceback (most recent call last):
#>  File "<stdin>", line 1, in <module>
#>StopIteration

リスト内包表記なる魔界記法 その2:辞書型

python

shuzo-kino.hateblo.jp
の続きです。
リスト内方表記で辞書型のデータを作る事もできます。
とはいえ、for節特有の癖から意図しない挙動をする可能性も。

実際のところ

キーと値を通常の辞書型と同様の並びで実装できます。

{x:y+3 for x in "foobar" for y in range(0,6,1)}
#>> {'r': 8, 'b': 8, 'o': 8, 'f': 8, 'a': 8}

とはいえ……後置のforの要素は末尾しか返さないという、致命的な挙動があったりします。
キーをリスト型から生成したい場合なんかには向きませんね……。

{x:y for y in "foobar" for x in range(0,6)}
#>> {0: 'r', 1: 'r', 2: 'r', 3: 'r', 4: 'r', 5: 'r'}

{y:x for x in "foobar" for y in "foobar"}
#>> {'r': 'r', 'b': 'r', 'o': 'r', 'f': 'r', 'a': 'r'}

"Cannot fetch index base URL http://pypi.python.org/simple/"とか出たら……pipが古い可能性大

python

記事執筆時点において、pipの最新版はv8.1系です。
ところが、debian環境……例えば、Rasbianで

$ sudo apt-get install python3-pip

などで導入したpipはv1.3系と凄まじく古いものが導入されます。
内部で参照している諸々は完全に時代遅れなので以下のコマンドで削除した上で

$ sudo apt-get remove python3-pip

大元のサイトから直接導入してあげます。

$ curl -kL https://bootstrap.pypa.io/get-pip.py | python3

それでも解決しない場合 or 何らかの事情で旧環境で強行できる場合

OpenSSH

上記エラー以外にも、何らかの理由でpipが外にアクセス出来ない場合はOpenSSH関係のライブラリが導入されていないケースも想定されるそうです。
kimoi.hatenadiary.com

そもそもネットワークが繋がってない

これは私が実際に遭遇したケース。
とある無線接続の実験機器を別環境に持って行って再実験をした処、反応が無くなった事がありました。
色々試したところmpingも駄目でapt-getも駄目。
……懸命な読者の皆様は、もうお気づきでしょう。
ただのSSIDの設定忘れでした。