Hatena::ブログ(Diary)

kamicupの備忘録 このページをアンテナに追加 RSSフィード

2014-12-17

Yii2のauthclientでTwitterのpost系処理(バグを回避する)

| 18:52 | Yii2のauthclientでTwitterのpost系処理(バグを回避する)を含むブックマーク Yii2のauthclientでTwitterのpost系処理(バグを回避する)のブックマークコメント

もう少し詳しい内容をQiitaにアップしました。


とつぶやいたら @tanakahisateru さんが↓このヒントを教えてくれたので、

https://twittercommunity.com/t/post-request-returned-message-could-not-authenticate-you-code-32-after-migrated-to-api-v1-1/10264

authclientのソースを追って調べてみました。


結論から言うと、

yii\authclient\clients\Twitter

では今のところ、GET系の処理しか行えません。


POST系の処理を投げると

{"errors":[{"message":"Could not authenticate you","code":32}]}

というエラーレスポンスが返ってきます。


POST系の処理を行うには、親クラスである yii\authclient\OAuth1 の処理を一部書き換える必要があります。

使えるようにしたものを↓に置いておくので、yii\authclient\clients\Twitter の代わりにどうぞ。

<?php
use yii\authclient\OAuth1;

class Twitter extends OAuth1
{
    public $authUrl = 'https://api.twitter.com/oauth/authorize';
    public $requestTokenUrl = 'https://api.twitter.com/oauth/request_token';
    public $requestTokenMethod = 'POST';
    public $accessTokenUrl = 'https://api.twitter.com/oauth/access_token';
    public $accessTokenMethod = 'POST';
    public $apiBaseUrl = 'https://api.twitter.com/1.1';

    protected function initUserAttributes() {
        return $this->api('account/verify_credentials.json', 'GET');
    }
    protected function defaultName() {
        return 'twitter';
    }
    protected function defaultTitle() {
        return 'Twitter';
    }    
    
    protected function composeRequestCurlOptions($method, $url, array $params) {
        if ( $method === 'POST' && strpos($url, $this->apiBaseUrl) === 0 ) {
            $curlOptions = [];
            $curlOptions[CURLOPT_POST] = true;
            if (!empty($params)) {
                $curlOptions[CURLOPT_POSTFIELDS] = http_build_query($params);
            }
            $authorizationHeader = $this->composeAuthorizationHeader($params);
            if (!empty($authorizationHeader)) {
                $curlOptions[CURLOPT_HTTPHEADER] = ['Content-Type: application/x-www-form-urlencoded', $authorizationHeader];
            }
            return $curlOptions;
        } else {
            return parent::composeRequestCurlOptions($method, $url, $params);
        }
    }
}
トラックバック - http://d.hatena.ne.jp/kamicup/20141217

2014-11-03 [Golang] メモ

メソッドの継承とかオーバーライド(っぽい事)

| 18:57 |  メソッドの継承とかオーバーライド(っぽい事)を含むブックマーク  メソッドの継承とかオーバーライド(っぽい事)のブックマークコメント

ケース:

3rd party ライブラリの実装を利用しつつも一部のメソッドだけ書き換えたい。

具体的には、Aというインターフェースを実装したAImplのメソッドをオーバーライドしたい。

こういう場合は、AImplを匿名フィールド(埋め込みフィールド)として持つBImplを作ってやれば、AImplを継承しつつメソッドをオーバーライドする(かのような)事ができる。

(↓)こんな感じで。

http://play.golang.org/p/9EjYiAj3YQ


package main

import "fmt"

type A interface {
	Hoge() string
}

type AImpl struct {
	value string
}

func (self AImpl) Hoge() string {
	return "This is generated in AImpl.Hoge(), value is " + self.value
}

type BImpl struct {
	AImpl
}

func (self BImpl) Hoge() string {
	original := self.AImpl.Hoge()
	overwritten := original + " ; This is added in B.Hoge(), value is " + self.value + "!"
	return overwritten
}

func main() {
	var a A
	a = BImpl{AImpl{"yeah"}}
	fmt.Println(a.Hoge())
}

出力:This is generated in AImpl.Hoge(), value is yeah ; This is added in B.Hoge(), value is yeah!

トラックバック - http://d.hatena.ne.jp/kamicup/20141103

2014-08-25 [Golang] Go言語でサービス作ってる話

| 12:49 | ■を含むブックマーク ■のブックマークコメント

8/23(土)の俺聞け9で発表してみた際のスライドです。

トラックバック - http://d.hatena.ne.jp/kamicup/20140825

2014-06-20

今メインで取り組んでることのアピール

17:33 | 今メインで取り組んでることのアピールを含むブックマーク 今メインで取り組んでることのアピールのブックマークコメント

もしあなたやあなたの家族が「家造り」や「リフォーム」を思い立ったなら、どこのハウスメーカーor工務店さんに頼もうとするか・・・? たぶん人生の中でも大きな買いものだし、何度もあることじゃないから経験なんてなくて、よくわからない。 判断の材料になるのは、つき詰めれば「信頼できる相手かどうか」という点に尽きるんじゃないかと思います。

ネットなら、SUUMOやHOMESで検索すれば、すごい数のハウスメーカーや工務店がリストアップされるんだけど、でもそれで何かを決められるわけでもなく、相場を知るためにたくさん資料請求だけして、けっきょくは「知人の紹介」や「近い」お店ににおっかなびっくり足を運ぶっていうのは、良くあるパターンみたい。

僕らCoumfyは、そうじゃなくて、どうすれば信頼できる工務店を(ネットでも)探せるのかという課題を解決していこうと考えて、このサイト作りに取り組んでます。

まずは大阪周辺から始めて、まだ掲載10店(&掲載準備中10数店)ですが、がんばってもっと広げていくよ。

f:id:kamicup:20140620173128p:image

トラックバック - http://d.hatena.ne.jp/kamicup/20140620

2013-11-07

どうでもいいこと

16:47 | どうでもいいことを含むブックマーク どうでもいいことのブックマークコメント

なんかエンジニア探す時に特定の言語の経験や実績を問う人って多いんだけど、あれってだいぶ的外れだと思うよね。まともなエンジニアなら初めて触る言語でもすぐ使いこなせるもんだし、それが出来ない人はそもそも自フィールドでもマトモなモノ創りは出来ないと思うし。。。

Go言語でウェブ開発した感想

16:46 | Go言語でウェブ開発した感想を含むブックマーク Go言語でウェブ開発した感想のブックマークコメント

Go言語でウェブ開発する機会があったので、かるく感想。

2人コンビで、まぁだいたい2週間で設計して、2週間でざっくり作って、2週間かけて細部の作りこみ・バグ取り・運用環境構築を並行しながらデザイナー&オペレーターへの引き継ぎ、ていうスケールで。

自身、Goは全く初めて触る言語だけど、まぁ良くも悪くも「素直」な処理系ですね。ウェブ開発周りでフルスタックの経験があれば、ゼロから2日もあればほぼ把握して、3日目にはもうトップギアでガリガリ開発できる感じ。

最初はポインターやらprintfやら懐かしい!、とか思いながらいじり始めて、しかし標準でウェブ開発の一式が揃ってるのは今時の世代っぽいなぁ、とか思いながら、調子が乗って来ると、ありゃ、まだまだ発展途上の言語だなぁとか感じる部分もポロポロ出てくる、という具合。

あと、「日本語の情報があんまりない」ってのはまぁその通りだけど、そもそも根が素直っていうか単純っていうか単細胞(これは言い過ぎか^^;)な処理系なので、わざわざ日本語の情報を探す必要は案外出てこないんじゃないかとは思います。

手触り感としては、RoRなどとは丸っきり真逆で、でもJavaほどガッツリな雰囲気もない。・・・うん、決して悪くはないです。生粋のエンジニアのチームでやる分には、むしろスピード乗るかもしれない。Java系とLL系の対局軸の間で、意外にGoがしっくりくるというパターンはあるかもな。

トラックバック - http://d.hatena.ne.jp/kamicup/20131107

2013-09-12

FURICLE

20:36 | FURICLEを含むブックマーク FURICLEのブックマークコメント

ああ、そうそう。

今はこの海外向けサービスやってます。

http://furicle.jp

日本語サイトはこっちです。

http://release.furicle.jp

トラックバック - http://d.hatena.ne.jp/kamicup/20130912

2013-09-06

SSL証明書更新(rapid-ssl.jp→namecheap乗り換え)

| 15:50 | SSL証明書更新(rapid-ssl.jp→namecheap乗り換え)を含むブックマーク SSL証明書更新(rapid-ssl.jp→namecheap乗り換え)のブックマークコメント

SSL証明書の更新時期が来たタイミングで改めてググると、国内の販売業者より海外業者の方が大幅に安いことに気づいたので、乗り換えることにしました。

今までは http://www.rapid-ssl.jp で買っていて年額\2,600だったのが、

今回は http://www.namecheap.com では年額$10.95で買える、

ということで半額以下。

商品はどちらもGeoTrustのRapidSSLなので、CSRや設定方法なども全く同じで変わらず。

NamecheapはPayPal払いもOKなので楽ちん。

なんで今までわざわざ国内で買ってたんだろう。。。

トラックバック - http://d.hatena.ne.jp/kamicup/20130906