WEB制作メモ

web制作・ビジネス・アイデア・生活・ホームページ制作・更新など

google Gsuite無償版から Google Workspace Business Starterにアップグレード時、住所が通らない話。。

google Gsuite無償版から
Google Workspace Business Starter
に変更しました。
請求にクレカを登録しなければなりません。
サブスクリプションを申し込む際に
住所や郵便番号を入れるところがあるのですが、
日本の区や郵便番号が一覧になく進めません。
サポートへ送ったのですが、返答なし、、、
なので
alabana アラバマ州 郵便番号 35004
で登録したところ通った。
仕方ない対処だったのですが、いいのだろうか

指定した複数の文字列を含まない1行を検索する 正規表現。

指定した複数の文字列を含まない1行を検索する

 

    ^(?!.*(文字列|文字列)).+$

 

 

    文字列を|(パイプ)で繋げることで、複数の文字列を除外することが出来ます。

 

 

参照
    https://style.potepan.com/articles/9251.html#:~:text=3%20%E3%81%BE%E3%81%A8%E3%82%81-,%E7%89%B9%E5%AE%9A%E3%81%AE1%E6%96%87%E5%AD%97%E4%BB%A5%E5%A4%96%E3%82%92%E5%90%AB%E3%81%BE%E3%81%AA%E3%81%84%E6%96%87%E5%AD%97%E5%88%97,%E3%81%AA%E3%81%84%E3%80%8D%E8%A1%A8%E7%8F%BE%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%99%E3%80%82

twitter v2 tweet

通常のツイート
    参照サイト
        https://zenn.dev/snowcait/articles/32c351553ae67c
    エラー文章
         
        Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint.  Supported authentication types are [OAuth 1.0a User Context, OAuth 2.0 User Context]
         参照
            -https://ohwhsmm7.blog.fc2.com/blog-entry-602.html
                >>
                    Authentication and rate limitsの対応しているエンドポイントは
                    OAuth 1.0a User Context
                    OAuth 2.0 Authorization Code with PKCE
                    でした
                    OAuth 2.0 Bearer Token
                    が無い
                 
                 users.read も必要
                    とのこと
                        scopeに追加
                            結果
                                

array (
  'errors' =>
  array (
    0 =>
    array (
      'parameters' =>
      array (
      ),
      'message' => 'Request body is not valid JSON.',
    ),
  ),
  'title' => 'Invalid Request',
  'detail' => 'One or more parameters to your request was invalid.',
  'type' => 'https://api.twitter.com/2/problems/invalid-request',
)

 


                                 
                                json_encode
                                で変換して、再度ツイート
                                成功!
                                     
                                        
$ php post.php
array (
  'data' =>
  array (
    'id' => '1511603460013445120',
    'text' => 'text',
  ),
)
                                             
                                やっとここまできた!

twitter api v2 post で 自分の投稿へのリプライにに返信したい。けどリフレッシュトークンまで

 
  • 最初はplainで行った方が良い
  • どうしても上手くいかない場合
        developerサイトで
        アプリの種類をかえてみる。
---
 
Twitter API Playground という純正のツールでテスト
 
必要そうな部分は
text
reply
in_reply_to_tweet_id
exclude_reply_user_ids
 
の三つの数値
 
特定のツイートを取得したさいに取得できるはず。
まずは確認。
 

まずは、通常のツイートをする。
マニュアルで
jsonでおくっている。
php curljsonで送る準備をしてみよう。
 
なかなか PHP

POST /2/tweets

 
でツイートする記事がない。。。
 

JSON body parameters

{
  "data": {
    "id": "1445880548472328192",
    "text": "Hello world!"
  }
}
とあるので、とりあずこれを使いたいが
Authorization: Bearer
がつかえないっぽい。
OAuth 1.0a and OAuth 2.0 turned on
を使えるように設定
Callback URI / Redirect URL
に設定。なんでもいい?
POSTでおくるものは
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'refresh_token=bWRWa3gzdnk3WHRGU1o0bmRRcTJ5VUxWX1lZTDdJSUtmaWcxbTVxdEFXcW5tOjE2MjIxNDc3NDM5MTQ6MToxOnJ0OjE' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'client_id=rG9n6402A3dbUJKzXTNX4oWHJ'
うーん  refreshtokenあたりがややこしそう
 
いろいろ探し回っていると
こちらの記事がうまくいきそう
 
Bearer Tokenでは特定のTwitterアカウントとしては認証されません。
=アカウントに対する操作(※)を行えない
 
なるほど
 
APIキー等をenvに登録
composer update
 
$ php example_index.php
 
array (
  'errors' =>
  array (
    0 =>
    array (
      'message' => 'You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve',
      'code' => 453,
    ),
  ),
)
現在、Twitter API v2エンドポイントへのアクセスのみを含むEssentialアクセス権をお持ちです。このエンドポイントへのアクセスが必要な場合、開発者ポータルからElevatedアクセスに申請する必要があります。詳しくはこちらをご覧ください: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve
結局このぷろぐらむはv1を参照していた。
エンドポイントをv2に変えたらすぐうごくのだろうか?!?
 
やってみる
。。。
そのままでは動かない。。。
 
 
やはりもどってやるしかないのか
これは、はてしないのか?
 
設定後、Authorization Request の URL を作成
 
URLを作成。
URLを作ってアクセスして何かを手に入れないといけないらしい。
もう一度みなおして、
URLを作るための
パラメータは
Parameter
Description
response_type
You will need to specify that this is a code with the word “code”. 
client_id
Can be found in the developer portal under the header "Client ID".
redirect_uri
Your callback URL. This value must correspond to one of the Callback URLs defined in your App’s settings. For OAuth 2.0, you will need to have exact match validation for your callback URL.
state
A random string you provide to verify against CSRF attacks.  The length of this string can be up to 500 characters.
code_challenge
PKCE parameter, a random secret for each request you make. 
code_challenge_method
Specifies the method you are using to make a request (S256 OR plain).
ややこしい、、、
とにかくつくるしかない。
こんな感じのやつをつくる
URLをつくって
アクセスしてみると

 
なるほど何か出た!
 
ボタンを押してもtwitterのホームが出るだけだが、、、
とにかく前へ進んだ。。。
redirectしたURLは
 
code部分が必要となるらしい
eDJucHpzYmJuNHp6T0Z3ZDBnY2RsVHFsXzFBb0xUMzFJWmVEMUFjRi00WlR2OjE2NDg4MTIwMDY1NTk6MToxOmFjOjE
 
refleshtokenの取得の方法がわからない。。。
OAuth 2.0 Authorization Code Flow with PKCE
についての記述がある。
この記事でわかりそ

二日たってもわからない
 
さて続き、おちついて
 
検索を開始
 
こちらの記事で

アクセストークンの更新

offline.accessを要求することで、アクセストークンリクエストのレスポンスとしてリフレッシュトークンを取得することができます
 
とある、すぐ取得できそう?。
 
まずはこれを実現するところから始めてみるか。。。。
 
code_verifier
 
code_verifier が上手く作れていない?
code_verifier 作り方 twitter
sha256に変換することと同意?
$hased_string = hash('sha256', $original_string);
さっそくいれてみるが。。。
変わらず
array (
  'error' => 'unauthorized_client',
  'error_description' => 'Missing valid authorization header',
)
code_verifier
にそのままcodeを入れてみる。
 
 
platformをよく見る
 
の記述が!
challenge
でいいのかな
 
結果かわらず
何かが足りない
 
次のサンプルに
--header 'Authorization: Basic
をつかっている例がある。
 
テスト用のcode_verifierを掲載しているところがあった
//code_verifier=8KxxO-RPl0bLSxX5AWwgdiFbMnry_VOKzFeIlVA7NoA code_challenge=y_SfRG4BmOES02uqWeIkIgLQAlTBggyf_G7uKT51ku8です。
うーん上手くいかない
 
別のサイトを参照
.NETの記事ではあるが、やっていることは同じはず
scopeにofflineはある
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
ん?
これは、いままでやってたことがちょっとちがう?
sha256してから
state は CSRF 対策のランダムな文字列です。(~500文字)
 
 
認可コードを取得する際に一致しているか確認します。
となると、変換しなくていい?
developperのページに行き設定もれがないか再度確認
今、PHPのみでテストしていてサーバーでテストしていなかったので
web appではなく native appに使用目的を変えた。
 
 
ん!?通った?
 
 
array (
  'token_type' => 'bearer',
  'expires_in' => 7200,
  'access_token' => 'SjBrX1o1SnI3bktHNjF4Yl9hU0Z3alpCRGlwckZ4OC1XTmZzbWVkN0FGdzRaOjE2NDkyMjE5MTA5MTE6MTowOmF0OjE',
  'scope' => 'tweet.write tweet.read offline.access',
  'refresh_token' => 'NVRwWWpJOUJSYlkzQW10VDNvNWlHQktLeWNaellva29YNDhGZzI1anVWMTBNOjE2NDkyMjE5MTA5MTE6MTowOnJ0OjE',
)
どゆことーdevelopがわのもともとの設定が間違ってた
 
ってことか。。。
plainでテストしていたので
s256に変えてやってみる
これはうまくいかない。
ひとまず通ったのでひと段落。
 
 

php で phantomjs検討、duskをつかってスクレイピングする。

php で ファントムJSをつかってスクレイピングする。
ヘッドレスブラウザ phantomjs
 
jsで作られたあとの表示をスクレイピングしたい。
 
 
PhantomJSは開発を中止している。
puppeteer (パペッティア)が後継?
 
PuPHPeteerはNodeライブラリであるPuppeteerをPHPでも利用出来るようにしたもの
 
nodejs  などが必要なようで、単体では動かない?
 
ブラウザをつかわない方法に対して、
 
ブラウザテストなどを目的とした
seleniumを使った方法や
duskという方法もあるみたい。
 
 
laravelを使いたいのでduskを使ってみようか
 
ブラウザを自動操作できる?
 
ローカルコンピュータへJDKSeleniumをインストールする必要はありません
DuskはスタンドアロンのChromeDriverを使用
 
composer require --dev laravel/dusk
 
エラー
  The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at your own risk, by setting the 'disable-tls' option to true   
 
php.iniを変更
curl,openssl部分
extension_dir = "ext"
extension=bz2
extension=curl
extension=openssl
 
 
composer require --dev laravel/dusk
 
再度挑戦。
インストールできた。
 
php artisan dusk:install
 
php artisan dusk
php artisan dusk:fails
php artisan dusk --group=foo
Warning: TTY mode is not supported on Windows platform.
PHPUnit requires the "mbstring" extension.
またもやエラーphp.iniの変更

Warning: TTY mode is not supported on Windows platform.
PHPUnit 9.5.19 #StandWithUkraine
 
No tests executed!

 
php artisan dusk:make test
testsというフォルダができる
なかに
Browser
Feature
Unit
ができる。
 
実行してみる
TTY mode is not supported on Windows platform.
エラー
Warning: TTY mode is not supported on Windows platform.
これは、無視してもよいという人もいる。色付けなどの部分なので、実際の実行には影響はすくないらしい。
 
まずはこの状態で、テストをしてみたい。
ブラウザが立ち上がり、テキストを読み込んだり、clickしたりしたい。
 
tests\DuskTestCase.php
option “–headless” をコメントアウトすると実際にブラウザが立ち上がる。
 
いまいちエラーがどこで起きているのか判別できない・
$browser->driver->manage()->getLog('browser');
 
これでも取れない。
 
iframeが問題か
withinFrame
というものがあるらしい。
 
こちらでうまくいった!
ありがとうございます。
 
 
 
 
 

composerでtinkerをいれたい

 
composer require laravel/tinker
 
php artisan tinker では動かない
 
やはり単体ではむりか
 
となると laravel自体をいれないとだめ?
 
composer create-project --prefer-dist laravel/laravel your-project-name
 
 
tinkerがつかいたいだけなのにちょっと大がかり 軽く使う方法があったらしりたい
 
 
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-curl` to temporarily ignore these required extensions.
 
 
phpを入れた手はいろいろと面倒なことがおきる。。。php.iniをそのままいれかえてもいいのかも
 
 
エラー
 
ext-curl
extension=curl
が怪しい。phpiniを確認
 
変更して保存
再度インストール
 
再度エラー
To enable extensions, verify that they are enabled in your .ini files:
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-fileinfo` to temporarily ignore these required extensions.
 
ext-fileinfoを有効に
変更して保存
 
composer create-project --prefer-dist laravel/laravel  laravelproject
インストールできました。
 
 
 
 
 

php8.1
    composer self-update時にエラー
     The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at your own risk, by setting the 'disable-tls' option to true      .
    php.iniの修正が必要
    https://digirakuda.org/blog/2018/06/04/post-251/