android riot apiの使用


Task




  • 登録ID」ボタンをクリックし、作成したニックネームを使用して情報
  • をインポートします.
  • インポートする情報
  • ニックネーム
  • ティル
  • ユーザアイコン
  • riot api


    https://developer.riotgames.com/apis
    Liott開発者のウェブサイトにはapiが詳しく記録されています.
    ログイン後にapi-keyを受け取りました.
    api-keyは毎日更新されます.

    summoner-v4

  • 伝票者Name(ニックネーム)で伝票者LevelとProfileIconIdを得ることができます.


  • ニックネームとapi keyを使用してrequest urlを構成します.

    league-v4


    SummonerIdを
  • で暗号化することでtierとrankを得ることができる.

  • ニックネームでは取得できませんので、EncrypteSummonerIdで取得します.
    伝票-v 4でaccountIdで受信します.

    In Android Studio


    manifest.xml


    インターネットへのアクセス権の取得
    <uses-permission android:name="android.permission.INTERNET" />

    layout

  • id_register_item.xml
  • riot apiで情報を取得したときに表示されるレイアウト.
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="350dp"
        android:layout_height="130dp"
        android:gravity="center"
        android:background="@drawable/id_register_item"
        android:id="@+id/id_register_item"
        android:visibility="gone"
        tools:showIn="@layout/activity_main"
        >
    
        <ImageView
            android:id="@+id/user_icon"
            android:layout_width="150dp"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:src="@drawable/garen"
            />
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="5"
            android:orientation="vertical"
            android:textAlignment="gravity">
    
            <TextView
                android:id="@+id/user_nickname"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="TextView"
                android:textColor="#006D44" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/user_level"
                    android:layout_width="80dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="TextView"
                    android:textColor="#006D44" />
    
                <TextView
                    android:id="@+id/user_tier"
                    android:layout_width="80dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:layout_weight="1"
                    android:text="TextView"
                    android:textColor="#006D44" />
            </LinearLayout>
    
            <TextView
                android:id="@+id/user_mbti"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="TextView"
                android:textColor="#006D44" />
    
            <TextView
                android:id="@+id/user_manner"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="TextView"
                android:textColor="#006D44" />
        </LinearLayout>
    </LinearLayout>
    メインレイアウトにアタッチします.
    IDが登録されていない場合は表示されないので、表示をgoneに設定します.
  • mainActivity.xml
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:context=".MainActivity"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:layout_gravity="center">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <include layout="@layout/id_register_item" />
            <Button
                android:id="@+id/plus_id_register"
    
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="@string/register_game_id"/>
    
        </LinearLayout>
    
    </LinearLayout>

    Name_API_Thread


    apiを受信する操作はインターネットからリソースを受信する操作であるため,スレッドが継承される.class Name_API_Thread extends Thread
    public Name_API_Thread(String Summoners_name){
        this.Summoners_name = Summoners_name;
    }
    public JSONObject get(String strUrl){
            try{
                URL url = new URL(strUrl);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setConnectTimeout(5000);
                con.setReadTimeout(5000);
                con.setRequestMethod("GET");
                con.setDoOutput(false);
    
                StringBuilder sb = new StringBuilder();
    
                if(con.getResponseCode() == HttpURLConnection.HTTP_OK){
                    //url에서 버퍼 형태로 데이터를 받음
                    BufferedReader br = new BufferedReader(new InputStreamReader
    (con.getInputStream(), "utf-8"));
                    String line = br.readLine();
                    while((line != null)){
                        sb.append(line).append("\n");
                        line = br.readLine();
                    }
                    br.close();
                    String result =  sb.toString();
                    //JSON 형태로 변환 후 리턴
                    JSONObject jsonObj = new JSONObject(result);
    
                    return jsonObj;
                }else{
                    Log.d("wrong response: ", con.getResponseMessage());
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
    }
    パラメータとしてurlを受信しJSOnObjectを返す方法.
    伝票-v 4とleague-v 4のURLアドレスが異なるため、それぞれメソッドが作成されています.
    @Override
    public void run() {
        String SummonerName = this.Summoners_name.replaceAll(" ", "%20");
        String requestURL = "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/" + SummonerName + "?api_key=" + TOKEN;
        //API lol_api = new API();
        JSONObject jsonObj = get(requestURL);
        try {
            if(jsonObj == null){ is_success = false; return; }
            else{ is_success = true;}
            Summoners_id = (String) jsonObj.get("id");
            Summoners_level = (int) jsonObj.get("summonerLevel");
            Summoners_icon = (int) jsonObj.get("profileIconId");
    				Summoners_bitmap = getImageFromUrl("https://ddragon.leagueoflegends.com/cdn/10.18.1/img/profileicon/"+getSummoners_info("icon")+".png");
            getInfo();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
    }
    メインアクティブデバイスでstartコマンドを発行するときに実行する方法.
    TOKENはapi keyです.
    これにより、EncrypteSummonerId、Level、アイコンIDを取得できます.
    public void getInfo(){
        String requestURL = "https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/"+Summoners_id+"?api_key="+TOKEN;
        JSONObject jsonObj = get(requestURL);
    
        try {
            Summoners_tier = (String) jsonObj.get("tier");
            Summoners_rank = (String) jsonObj.get("rank");
            Summoners_win = (int) jsonObj.get("win");
            Summoners_lose = (int) jsonObj.get("lose");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    EncrypteSummonerIdによりTier,Rank,勝利−失敗数を得ることができる.

    MainActivity.java

    final EditText et = new EditText(getApplicationContext());
    //닉네임을 받는 dialog
    final AlertDialog.Builder alt_blt = new AlertDialog.Builder(MainActivity.this, R.style.plus_id_register_dialog_style);
    alt_blt.setTitle("아이디 생성")
            .setMessage("닉네임을 적어주세요")
            .setCancelable(false)
            .setView(et)
            .setPositiveButton("확인", new DialogInterface.OnClickListener() {...});
    AlertDialog dialog = alt_blt.create();
    dialog.show();
    プレイヤーのニックネームをdialogで取得します.
    [in OnClickListener]
    public void onClick(DialogInterface dialogInterface, int i) {
          String value = et.getText().toString();
          //롤 닉네임으로 사용자의 id, level 티어, 승패를 받아온다.
          apiThread = new Name_API_Thread(value);
          try {
              apiThread.start();
              apiThread.join();
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
          //만약 아이디가 없는 아이디라면 Toast로 메시지 도시하고 중단.
          if(apiThread.getSummoners_info("is_success") == "false"){
              Toast.makeText(getApplicationContext(), "Wrong NickName!!", Toast.LENGTH_SHORT).show();
              return;
          }
          TextView user_nickname = (TextView) findViewById(R.id.user_nickname);
          TextView user_level = (TextView) findViewById(R.id.user_level);
          TextView user_tier = (TextView) findViewById(R.id.user_tier);
          TextView user_mbti = (TextView) findViewById(R.id.user_mbti);
          TextView user_manner = (TextView) findViewById(R.id.user_manner);
    
          LinearLayout user_layout = (LinearLayout) findViewById(R.id.id_register_item);
          plus_id_register.setVisibility(View.GONE);
          user_layout.setVisibility(View.VISIBLE);
    
          user_nickname.setText(value);
          user_level.setText("Level: " + apiThread.getSummoners_info("level"));
          user_tier.setText("Tier: " + apiThread.getSummoners_info("tier"));
          user_mbti.setText("MBTI: INFT");
          user_manner.setText("Manner: "+"SUCK");
    
    			ImageView user_icon = (ImageView) findViewById(R.id.user_icon);
          user_icon.setImageBitmap(apiThread.getSummoners_bitmap());
      }
    apiThread.join();:メッセージを受信する前に、アクティブなビューの内容を空の値で埋め込む問題があるため、トピックの終了を待ってから続行してください.

    urlで必要なビットマップ画像をインポート


    Summons iconは、インポートするユーザーアイコンのインデックスを格納します.これを利用してurlを用いてビットマップを取得した.
    url: "https://ddragon.leagueoflegends.com/cdn/10.18.1/img/profileicon/" + Summoners_icon + ".png "
    public Bitmap getImageFromUrl(String urlStr){
            Bitmap imgBitmap = null;
            try{
                URL url = new URL(urlStr);
                URLConnection con = url.openConnection();
                con.connect();
                BufferedInputStream bf = new BufferedInputStream(con.getInputStream());
                imgBitmap = BitmapFactory.decodeStream(bf);
                bf.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return imgBitmap;
        }
        public Bitmap getSummoners_bitmap(){
            return Summoners_bitmap;
        }

    実行画面

  • 登録前
  • dialog
  • 登録後

  • 私のコードを見てくれてありがとう.グーグルを作るときは和弦をたくさん混ぜていますが大変ですね
    フィードバックを歓迎します.