Retrofit

Retrofitは、型安全なAndroid向けHTTPクライアント。
REST APIとのやり取りに使う。

Retrofit

build.gradleは、

を追加。
最新の2.8.1で揃えたが、途中でメソッド内部に入ったままSEGVしたみたいなので、バージョン下げたらこれで動いた。
AndroidManifest.xmlは、

を追加。
activity_main.xmlは、

ListViewを設置。
今回は、GitHub APIでレポジトリ一覧をリストビュー表示する。
レポジトリリストを取得するためのインターフェースを作る。

@GETがAPIパスで、"{"と"}"で囲まれたところは後で呼び出し時に指定できる。
リストのアイテムとなるレポジトリ名を持つレポジトリクラスは、

getとsetができるように。
MainActivity.javaは、

Retrofitオブジェクトを生成し、GitHubRepositoryServiceの生成し、serviceからlistRepositoriesでレポジトリ一覧を取得し、レスポンスをListViewに反映。
と、こんな風に比較的簡単に表現できる。

レポジトリ一覧
レポジトリ一覧

レポジトリ一覧。

Sample/retrofit/Retrofit/Retrofit/RF/RF_ at master · bg1bgst333/Sample · GitHub

Gson.toJson(Android)

今度はAndroidでGsonを使う。

GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back

build.gradleで、

を追加。
activity_main.xmlは、

毎回のこれを追加。
Profile.javaを、

用意し、
MainActivity.javaで、

jsonをtextView1にセット。

こうなった
こうなった

こうなった。

Sample/gson/Gson/toJson_android/GS/GS_ at master · bg1bgst333/Sample · GitHub

Gson.toJson

GsonはJSONJavaオブジェクトに変換するライブラリ。

GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back
Javaオブジェクト⇔JSONの変換はGSONを使おう | ITでExit
Gson (Gson 2.8.6 API)

Gson.toJsonで、JavaオブジェクトをJSONに変換する。

The Central Repository Search Engine

ここからダウンロード。

jarを選択してダウンロード。
jarを選択してダウンロード。

jarを選択してダウンロード。

libに置く
libに置く

libに置く。

読み込んで
読み込んで

読み込む。

Profile.javaをこう定義する。

MainClass.javaはこうする。

こんな感じでJavaのオブジェクトがJSONになる。
こんな感じでJavaのオブジェクトがJSONになる。

こんな感じでJavaのオブジェクトがJSONになる。

Sample/gson/Gson/toJson/src/Gson at master · bg1bgst333/Sample · GitHub

指定されたユーザのレポジトリ一覧

GitHubAPIを使って、GitHubの様々な情報を取得できる。

GitHub API v3 | GitHub Developer Guide

今回は、指定されたユーザのレポジトリ一覧を取得する。
(認証無しなのでpublicのみ)

Repositories | GitHub Developer Guide

libcurlを使って、

/* ヘッダファイルのインクルード */
#include <stdio.h> /* 標準入出力 */
#include <string.h> /* 文字列処理 */
#include <curl/curl.h> /* curl */

/* main関数の定義 */
int main(void){

  /* 変数の宣言 */
  CURL *curl; /* CURL構造体curl. */

  /* 初期化 */
  curl = curl_easy_init(); /* curl_easy_initで初期化. */

  /* URLのセット. */
  curl_easy_setopt(curl, CURLOPT_URL, "https://api.github.com/users/bg1bgst333/repos"); /* curl_easy_setoptでURLに"https://api.github.com/users/bg1bgst333/repos"をセット. */

  /* 実行 */
  curl_easy_perform(curl); /* curl_easy_performで実行. */

  /* 後始末 */
  curl_easy_cleanup(curl); /* curl_easy_cleanupで破棄. */

  /* プログラムの終了. */
  return 0; /* 0を返して正常終了. */

}

とする。
しかし、実行すると、

$ vi main.c
$ gccmain.c -o main -lcurl
$ ./main

Request forbidden by administrative rules. Please make sure your request has a User-Agent header (http://developer.github.com/v3/#user-agent-required). Check https://developer.github.com for other possible causes.
$

どうもユーザエージェントが必要らしい。

CURLOPT_USERAGENT

適当にユーザエージェントをセットすると、

$ vi main.c
$ gcc main.c -o main -lcurl
$ ./main
[{"id":185426457,"node_id":"MDEwOlJlcG9zaXRvcnkxODU0MjY0NTc=","name":"32feet","full_name":"bg1bgst333/32feet","private":false,"owner":{"login":"bg1bgst333","id":10162817,"node_id":"MDQ6VXNlcjEwMTYyODE3","avatar_url":"https://avatars0.githubusercontent.com/u/10162817?v=4","gravatar_id":"","url":"https://api.github.com/users/bg1bgst333","html_url":"https://github.com/bg1bgst333","followers_url":"https://api.github.com/users/bg1bgst333/followers","following_url":"https://api.github.com/users/bg1bgst333/following{/other_user}","
...
(省略)
...
false,"open_issues_count":2,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":2,"watchers":0,"default_branch":"develop_vs2005_7"}]$

レポジトリ情報一覧が物凄く一杯取れた。

Sample/github/repos/list_repositories_for_a_user/src/repos at master · bg1bgst333/Sample · GitHub

curl_easy_perform

libcurlは、cURLにあるcurlコマンドをライブラリとして使えるようにしたもの。

C/C++のlibcurl利用サンプル - Qiita
[C言語] curl libを使ってみる - Qiita
libcurl - curl_easy_perform()

curl_easy_performでリクエストを実行する。
まず、libcurlのインストール。

$ sudo yum install libcurl-devel
[sudo] bg1 のパスワード:
Fedora Modular 31 - x86_64                       20 kB/s | 6.0 kB     00:00    
Fedora Modular 31 - x86_64 - Updates             11 kB/s | 6.3 kB     00:00    
Fedora Modular 31 - x86_64 - Updates            245 kB/s | 582 kB     00:02    
Fedora 31 - x86_64 - Updates                     11 kB/s | 6.4 kB     00:00    
Fedora 31 - x86_64 - Updates                    959 kB/s | 6.5 MB     00:06    
Fedora 31 - x86_64                               11 kB/s | 6.1 kB     00:00    
依存関係が解決しました。
================================================================================
 Package              Architecture  Version                 Repository     Size
================================================================================
インストール:
 libcurl-devel        x86_64        7.66.0-1.fc31           fedora        807 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 807 k
インストール済みのサイズ: 1.3 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
libcurl-devel-7.66.0-1.fc31.x86_64.rpm          367 kB/s | 807 kB     00:02    
--------------------------------------------------------------------------------
合計                                            281 kB/s | 807 kB     00:02    
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  インストール中   : libcurl-devel-7.66.0-1.fc31.x86_64                     1/1
  scriptletの実行中: libcurl-devel-7.66.0-1.fc31.x86_64                     1/1
  検証             : libcurl-devel-7.66.0-1.fc31.x86_64                     1/1

インストール済み:
  libcurl-devel-7.66.0-1.fc31.x86_64                                            

完了しました!
$

で、main.cに、

とすると、

$ vi main.c
$ gcc main.c -o main -lcurl
$ ./main
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title id="title_index">B.G-STATION</title>
  </head>
  <body id="body_index" bgcolor="#ffffff" text="#7700cc" link="0000ff" alink="ff0000" vlink="ff00ff">
    <div id="div_title_image" align="center">
      <img src="/images/title.png" width="460px" height="140px" />
    </div>
    <div id="div_link_top" align="center">
      <a href="bgst/index.html">Top</a>
    </div>
  </body>
</html>
$

curlでリクエストを投げた時のようにレスポンスが返る。

Sample/libcurl/curl_easy_perform/curl_easy_perform/src/curl_easy_perform at master · bg1bgst333/Sample · GitHub

curl

cURLは、いろいろなプロトコルで通信できるネットワークコマンドツール。

GitHub - curl/curl: A command line tool and library for transferring data with URL syntax, supporting HTTP, HTTPS, FTP, FTPS, GOPHER, TFTP, SCP, SFTP, SMB, TELNET, DICT, LDAP, LDAPS, MQTT, FILE, IMAP, SMTP, POP3, RTSP and RTMP. libcurl offers a myriad of powerful features

現在だと、Linuxなどはたいていインストールされているが、標準コマンドではない。

"curl"のみ打つと、

$ curl
curl: try 'curl --help' or 'curl --manual' for more information
$

ヘルプはこっちという感じで教えてくれる。
一番簡単なのは、curlの後にURLを渡すことで、

$ curl http://bgstation0.com/
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title id="title_index">B.G-STATION</title>
  </head>
  <body id="body_index" bgcolor="#ffffff" text="#7700cc" link="0000ff" alink="ff0000" vlink="ff00ff">
    <div id="div_title_image" align="center">
      <img src="/images/title.png" width="460px" height="140px" />
    </div>
    <div id="div_link_top" align="center">
      <a href="bgst/index.html">Top</a>
    </div>
  </body>
</html>
$

こんな風に、指定したURLのレスポンスボディであるHTMLを返す。

git

Gitは、分散型ソースコード管理ツール。

Git

Windowsなら、

Git - Downloading Package

ここからDLしてインストールする。
Linuxなどの場合は、yumやaptでインストールする。

レポジトリディレクトリの外で、"git"とただそれだけ打つと、

$ pwd
/home/bg1/project/cloud/github.com
$ ls
Sample  Temp  Test  Test_
$ git
usage: git [--version] [--help] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   fetch      Download objects and refs from another repository
   grep       Print lines matching a pattern
   init       Create an empty Git repository or reinitialize an existing one
   log        Show commit logs
   merge      Join two or more development histories together
   mv         Move or rename a file, a directory, or a symlink
   pull       Fetch from and merge with another repository or a local branch
   push       Update remote refs along with associated objects
   rebase     Forward-port local commits to the updated upstream head
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index
   show       Show various types of objects
   status     Show the working tree status
   tag        Create, list, delete or verify a tag object signed with GPG

'git help -a' and 'git help -g' lists available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
$

オプションやサブコマンドの説明が表示される。