Open7

laravelとdmm apiを使ってアフィサイト作る

bz0bz0

dmm-php-sdk

このライブラリを使ってみるとteratailで質問されているものと同じエラー発生
https://github.com/dmmlabo/dmm-php-sdk

GuzzleHttp\Client::request(): Argument #3 ($options) must be of type array, string given, called in /work/vendor/guzzlehttp/guzzle/src/Client.php on line 92

https://teratail.com/questions/355666

下記のようにhttp_client_handlerにcurlを指定することでエラー回避できました。

        $dmm = new \Dmm\Dmm([
            "affiliate_id" => 'xxx',
            "api_id"       => 'xxx',
            "http_client_handler" => 'curl'
        ]);
bz0bz0

人気の作品(作者ごとにまとめて並べる

SELECT id, maker_id, maker_name, title, review_count, review_average, genre FROM (
	SELECT *, maker->"$[0].id" as maker_id, maker->"$[0].name" as maker_name
	FROM fanza_doujin_items
	WHERE campaign IS NOT NULL
	  AND date >= "2020-01-01"
	  AND genre->"$[0].id" != 8
	  AND review_average >= 4
	  AND review_count >= 10
) as a
ORDER BY maker_id, review_count desc, review_average desc

人気の総集編

SELECT id, maker_id, maker_name, title, review_count, review_average, genre FROM (
	SELECT *, maker->"$[0].id" as maker_id, maker->"$[0].name" as maker_name
	FROM fanza_doujin_items
	WHERE campaign IS NOT NULL
	  AND genre->"$[0].id" != 8
	  AND review_average >= 4
	  AND review_count >= 10
	  AND title LIKE "%総集編%"
) as a
ORDER BY maker_id, date asc

高評価の作者:

SELECT maker_id
     , maker_name
     , max(review_count) as max_review_count
     , max(review_average)
     , GROUP_CONCAT(REPLACE(image_large_url, ',', ',')) AS image_large_urls # 作者同じ作品をまとめ
     , GROUP_CONCAT(REPLACE(affiliate_url, ',', ',')) AS affiliate_url # 作者同じ作品をまとめ
     , COUNT(*) AS doujin_count # 作者の作品数
FROM (
	SELECT *, maker->"$[0].id" as maker_id, maker->"$[0].name" as maker_name
	FROM fanza_doujin_items
	WHERE genre->"$[0].id" != 8 # CG・イラスト集除外
	  AND review_average >= 4 # 評価4以上
	  AND date >= "2020-01-01" # 2020年から販売開始された商品
	ORDER BY review_count, review_average
) as a
GROUP BY maker_id
ORDER BY max_review_count desc
bz0bz0

サブクエリを定義しているSQLをクエリビルダやEloquentクエリで記述するには困難なので
直接SQLを実行したいがpaginate使うとエラー発生。下記読んで解決
https://qiita.com/kakita-yzrh/items/1bf38eb8a1c8819a78f0

Call to a member function paginate() on array

mysqlのgroup_concatが途中で切れるので対応中。下記試してみたがうまくいかず
my.cnf直してdocker-composeで再起動かけたが変わらず。

MySQLのGROUP_CONCAT関数の結果が切れる事象の対策
https://qiita.com/nwsoyogi/items/196cb92f79c6f01871e0#:~:text=2017-10-28-,概要,になってしまいます。

my.cnfのパーミッションが適切でない場合、設定が有効にならないので修正
chmod 644 /etc/my.cnfに変えてdocker-compose restartで再起動かけて直った。

World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.

https://mimirswell.ggnet.co.jp/blog-166

bz0bz0

mysqlでのJSON検索

mysql5.7でどうか調査
https://qiita.com/johnnytfhs/items/e649f05acaadb0afe29d
https://dev.mysql.com/doc/refman/8.0/ja/json-search-functions.html

JSON_CONTAINS(genre, '{"name": "制服"}')
結果としていくつ指定した要素があるか

JSON_SEARCH(genre, 'all', 'イラスト・CG集')
指定した文字列あればそのJSONパスを返す

https://kakakakakku.hatenablog.com/entry/2020/02/16/140906
JSONから抽出したテキストの「"」を削る
JSON_UNQUOTE(JSON_EXTRACT(maker, "$[0].name"))

集計でJSONでまとめたいときは下記。このあたりまとめられてる資料なかなか見つからない
https://www.wakuwakubank.com/posts/872-mysql-aggregate-json/
JSON_OBJECTAGG(content_id,JSON_OBJECT('campaign_title',campaign_title,'affiliate_url',affiliate_url,'image_large_url',image_large_url))

bz0bz0

R18のtwitterアフィだとリンククリック約100件で1件報酬発生のイメージ

bz0bz0
SELECT a.maker_id
                       , a.maker_name
                       , MAX(a.review_count) as max_review_count
                       , MAX(a.review_average) as max_review_average
                       , JSON_ARRAYAGG(a.genre) as genre
                       , COUNT(*) as doujin_book_count
                       , JSON_OBJECTAGG(content_id,JSON_OBJECT('campaign_title',campaign_title,'affiliate_url',affiliate_url,'image_large_url',image_large_url))
                    FROM (
                        SELECT review_count
                             , review_average
                             , REPLACE(maker->"$[0].id", '"', '') as maker_id
                             , JSON_UNQUOTE(JSON_EXTRACT(maker, "$[0].name")) as maker_name
                             , genre
                             , affiliate_url
                             , image_large_url
                             , content_id
                             , campaign->"$[0].title" as campaign_title
                        FROM fanza_doujin_items
                    ) as a
                GROUP BY a.maker_id, a.maker_name
bz0bz0

bing chatgpt
https://www.bing.com/search?q=Bing+AI&showconv=1&FORM=hpcodx

  • 抽象的な質問から気になる部分を深堀りして聞いていき情報をまとめていく
  • 自分のユーザがどんな情報を欲してくるのかを考えて文章を作る
  • 〇〇について何点か箇条書きで教えて→掘り下げた内容をPREP法で〇文字程度で→