いろいろな備忘録書いてくブログ

SEが適当に備忘録を書いていくブログです

football-data.orgを利用してロシアワールドカップの試合結果を取得する

Get Football Data

前回の記事で公開したfootball-data.orgというAPIを使ってサッカーの試合結果を取得するWebアプリにロシアワールドカップの試合結果を取得するボタンを追加しました。
ワールドカップ開始前に公開できてよかった…あと9分後に試合開始だけどね…

HEROKU pomファイルが見つからないエラーが出る理由

Spring Bootを利用したプロジェクトをGitHubとherokuを連携してサービスを公開した際にハマったので備忘録として残しておく。
Could not find a pom.xml file! Please check that it exists and is committed to Git. なるエラーが表示されデプロイできなくなった。
GitHub上にはpomファイルがあるのに何故だ…と思ってたら理由は単純で、GitHubのルートフォルダ上にpomファイルがないためだった。
要するにGitHubにプロジェクトを公開した際にルートフォルダの下にフォルダがあってその下にソースコードがあったため、herokuからはpomファイルが見つからなかった。

無事にherokuにデプロイして公開できるようになりました^^
ヨーロッパのサッカーチームの試合結果をシーズン単位で検索できるようにする予定です。
Get Football Data

Java football-data.orgを利用して2017-2018シーズンのマンチェスター・シティの試合結果を取得する

Spring Bootを利用して何かWebアプリを作ろうと思い、色々考えてたところ「football-data.org」なるAPIを発見した。
こいつを使ってSpring BootとThymeleafのお勉強を兼ねたアプリを作ってみようと思う。
下記参考にさせてもらったブログです。

簡単!Spring BootでWebAPIをたたいてJSON形式のレスポンスをjavaオブジェクトに変換

jQueryで海外サッカーの試合結果を取得してみる – iBitzEdge

基本的には「football-data.org」から取得したjsonpojoオブジェクトにセットしてThymeleafで画面表示しているだけです。

とりあえずThymeleaf部分だけ

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>Get Football Data</title>
</head>
  <body>
    <h1>マンチェスター・シティFCの試合結果</h1>
    <p>2017-2018シーズンの試合結果を表示します。</p>
    <div style="margin-top:8px" th:each="teamsFixtures: ${TeamsFixturesDto.fixtures}">
    <p th:text="${teamsFixtures.date}"></p>
    <table border="1" style="width:500px;table-layout:fixed">
        <tbody>
            <tr>
                <td style="text-align:center;background: lightblue;"  th:text="${teamsFixtures.homeTeamName}"></td>
                <td style="text-align:center;background: lightblue;"  th:text="${teamsFixtures.awayTeamName}"></td>
            </tr>
            <tr>
                <td colspan="2" style="text-align:center" th:text="${teamsFixtures.result.goalsHomeTeam + ' - ' + teamsFixtures.result.goalsAwayTeam }"></td>
            </tr>
        </tbody>
    </table>
    </div>
    <div class="matchresults-end"></div>
  </body>
</html>

ソースコードGitHubに上げました。 GitHub - tevez19911212/AddStringBuilder

これからチームの検索機能等を追加していく予定。
最終的にAWSとか使って公開できたらな~という感じです。

Java StreamAPI備忘録

前回の記事に続いてJavaの備忘録
LINQとの名前の違いによく混乱する…

// streamAPI復習
List<String> strList = Arrays.asList("Ironman", "Captain America", "Deadpool");
strList.forEach(System.out::println);

List<String> newList = strList.stream()
    .filter(s -> s.length() > 7)
    .map(s -> "(" + s + ")")
    .collect(Collectors.toList());
newList.forEach(System.out::println);

// Match
boolean isAllMatch = strList.stream().allMatch(s -> s.length() > 7);
boolean isAnyMatch = strList.stream().anyMatch(s -> s.length() > 7);
boolean isNoneMatch = strList.stream().noneMatch(s -> s.length() > 7);

// collect
System.out.println( strList.stream().collect(Collectors.joining(",")) );
System.out.println( strList.stream().mapToInt(s -> s.length()).sum());

GitHub - tevez19911212/Memo1: 備忘録1

Java よく使うやつ1

備忘録記事 Javaでよく使うやつ1

よく使うやつというタイトルだけど、よく使うやつ忘れるのはまずいゾ
現在日の取得とフォーマット

ZonedDateTime now = ZonedDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(dtf.format(now));

Optional

public static void main(String[] args) {
    Optional<String> result = getHeroName("tony");
    String heroName = result.orElse("I'm Batman!!!");
    System.out.println(heroName);

    Optional<String> result2 = getHeroName("bruce");
    String heroName2 = result2.orElse("I'm Batman!!!");
    System.out.println(heroName2);
}

private static Optional<String> getHeroName(String yourName) {
    if ("tony".equals(yourName)) {
        return Optional.of("I am Ironman");
    }

    return Optional.empty();
}

JavaC#行ったり来たりしてると色々忘れてあかんな。

GitHub

GitHub - tevez19911212/Memo1: 備忘録1

Java SQL文をStringBuilderに変換する処理

パラメーターとして渡された文字列をStringBuilderで囲む

SQLをStringBuilderで囲む処理をJavaで書いてみました。
ドヤ顔で書き終わったあとに下記URLのサイトを見つけてしまった。
SQLよりPG用ソース文字列生成 - Web開発ツールズ
車輪の再発明

Javaソースコード

// 入力されたSQLを改行コードで分割してリストに格納したあとに、StringBuilderの文字列を付加する
List<String> sqlList = Arrays.asList(sql.split("\r\n"));
StringBuilder sbSql  = new StringBuilder("StringBuilder sql  = new StringBuilder();\r\n");
sqlList.stream().forEach(str -> sbSql.append("sql.append(\"" + str + "\");\r\n"));

thymeleafを使用したHTML側のソースコード

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hello Page</title>
</head>
<body>
    <p th:text="${msg}">please wait...</p>
    <form method="post" action="/">
        <textarea name="sql" th:value="${sql}" cols="40" rows="10" ></textarea>
        <input type="submit" value="Click" />
    </form>
    <p>
      <th:block th:if="${result}">
            <!-- 改行コードでsplitしてループ -->
        <th:block th:each="line: ${result.split('\r\n|\r|\n', -1)}">
          <th:block th:text="${line}" /><br />
        </th:block>
      </th:block>
    </p>
</body>
</html>

SpringBootを使用したプロジェクト全体のソースコードGitHubにあげてみました。

GitHub - tevez19911212/AddStringBuilder

SQL CASE式を利用したUPDATE文

CASE式を利用してUPDATE文を書くと、条件文技を利用した値のセットが可能になる。
・サンプル
 heroテーブルのuniverse を以下の条件で更新したい。
 1:companyがMARVELの場合はMCU
 2:companyがDCの場合はDCEU
 3:それ以外はother

UPDATE hero SET
  universe = 
    CASE 
      WHEN company = 'MARVEL' THEN 'MCU'   
      WHEN company = 'DC' THEN 'DCEU'   
      ELSE other 
    END;