はじめに
Qiitaへの公開記事の投稿が200件になりました。
これを記念して、Autonomous AI DatabaseからQiita API v2をコールして自分が投稿した記事の情報を取得、その情報を表に格納して、PVトップ10を確認してみました。
この記事を執筆している時点の全体公開記事の投稿は200件です。
1. 表の作成
Qiita API v2をコールして取得した記事の情報を格納する表qiita_post_pvを作成します。
ここでは、記事のタイ鳥、ページビュー、限定公開かどうかのフラグを格納することを想定しています。
SQL> CREATE TABLE qiita_post_pv (
2 title VARCHAR2(1000),
3 pageview NUMBER,
4 private BOOLEAN
5 );
表が作成されました。
SQL>
2. Qiita APIをコールして、自分が投稿した記事の情報を取得
DBMS_CLOUD.SEND_REQUESTファンクションでqiita API v2の「/api/v2/authenticated_user/items」をコールして、自分の投稿の情報を取得し、タイトルとページビュー、プライベートかどうか(TRUE/FALSE)を表qiita_post_pvに格納します。
SQL> set define off
SQL> DECLARE
2 per_page NUMBER := 50;
3 resp DBMS_CLOUD_TYPES.RESP;
4 i NUMBER;
5 j NUMBER;
6 cnt NUMBER := 0;
7 posts NUMBER;
8 pages NUMBER;
9 title VARCHAR2(1000);
10 page_view VARCHAR2(100);
11 private VARCHAR2(10);
12
13 BEGIN
14
15 resp := DBMS_CLOUD.SEND_REQUEST(
16 uri => 'https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=1',
17 method => DBMS_CLOUD.METHOD_GET,
18 headers => JSON_OBJECT('Authorization' VALUE 'Bearer XXXXXXXXXXXXXXXXXX')
19 );
20
21 posts := JSON_VALUE(DBMS_CLOUD.GET_RESPONSE_HEADERS(resp).TO_CLOB, '$."Total-Count"');
22
23 pages := CEIL(posts/per_page);
24
25 FOR i IN 1 .. pages LOOP
26 resp := DBMS_CLOUD.SEND_REQUEST(
27 uri => 'https://qiita.com/api/v2/authenticated_user/items?page='||i||'&per_page='||per_page,
28 method => DBMS_CLOUD.METHOD_GET,
29 headers => JSON_OBJECT('Authorization' VALUE 'Bearer XXXXXXXXXXXXXXXXXX')
30 );
31
32 FOR j IN 0 .. (per_page-1) LOOP
33 title := JSON_VALUE(DBMS_CLOUD.GET_RESPONSE_TEXT(resp), '$['||j||'].title');
34 page_view := JSON_VALUE(DBMS_CLOUD.GET_RESPONSE_TEXT(resp), '$['||j||'].page_views_count');
35 private := JSON_VALUE(DBMS_CLOUD.GET_RESPONSE_TEXT(resp), '$['||j||'].private');
36
37 INSERT INTO qiita_post_pv VALUES (title, page_view, private);
38
39 cnt := cnt+1;
40 EXIT WHEN(cnt >= posts);
41
42 END LOOP;
43 END LOOP;
44
45 COMMIT;
46 END;
47 /
PL/SQLプロシージャが正常に完了しました。
SQL>
3. 表に格納されたデータの確認
表qiita_post_pvの総レコード数を確認します。
SQL> SELECT COUNT(*) FROM qiita_post_pv;
COUNT(*)
----------
202
1行が選択されました。
SQL>
表qiita_post_pvに格納されているレコードのうち、privateがTRUEのレコード数を確認します。
SQL> SELECT COUNT(*) FROM qiita_post_pv
2 WHERE private = TRUE;
COUNT(*)
----------
2
1行が選択されました。
SQL>
この数字は、限定公開記事の数と一致しています。
表qiita_post_pvに格納されているレコードのうち、限定公開の記事にレコード数を確認します。
SQL> SELECT COUNT(*) FROM qiita_post_pv
2 WHERE private = FALSE;
COUNT(*)
----------
200
1行が選択されました。
SQL>
この数字は、全体公開記事の数と一致しています。
自分が投稿した記事の情報が漏れなく取得できていることが確認できたので、PVトップ10の記事を確認してみたいと思います。
SQL> set linesize 200
SQL> col title for a120
SQL> SELECT * FROM qiita_post_pv
2 ORDER BY pageview DESC
3 FETCH FIRST 10 ROWS ONLY;
TITLE PAGEVIEW PRIVATE
------------------------------------------------------------------------------------------------------------------------ ---------- ----------
Oracle Database 23c Free - Developer ReleaseをOracle Linux 8にインストールしてみた 12467 0
[OCI]Windows Server 2019 Standard 日本語化手順 12235 0
Autonomous Database:SELECT AI機能を使用してOpenAIを利用した自然言語によるクエリ実行を試してみた(日本語でも実行できた) 10330 0
[OCI]Oracle Database CloudでCDB内にキャラクタセットの異なるPDBが混在する環境を作ってみた 8138 0
[OCI]Oracle Cloud Infrastructure コンソールにサインインする際の手間を省力化するTips 7672 0
[OCI] gcsfuseを使用してGoogle Cloud Storage バケットをComputeインスタンスにファイルシステムとしてマウントしてみた 7153 0
[OCI]Oracle Linux 8にOracle Instant Client 21c+SQL*Plus+Apache 2.4+PHP 7.4+php-oci8-21cをセットアップしたときのメモ 6658 0
[OCI]Autonomous Database : Aurora PostgreSQLに対するデータベース・リンクを作成してデータを参照してみた 5938 0
Autonomous Database:DBMS_SCHEDULERで実行するジョブ内のSQLをパラレル実行させてみた 5897 0
[OCI]最新版:Autonomous Databaseでsysdate、systimestampが日本時間を返すようにする方法 5577 0
10行が選択されました。
SQL>
ということで、私が投稿したQiitaの記事のページビューTop10が確認できました。
最もPVが多かったのはこちらの記事で、12,467ページビューでした。