「クレープ屋的お勧めアニメ/Template」の版間の差分

提供:クレープ屋まとめwiki
ナビゲーションに移動 検索に移動
(ページの作成:「毎シーズンのおすすめアニメとか書きますよ ここでアニメ探してね https://www.livechart.me/ == 編集用テンプレ == <pre>== タイト...」)
 
編集の要約なし
 
(2人の利用者による、間の8版が非表示)
1行目: 1行目:
毎シーズンのおすすめアニメとか書きますよ
テンプレ作成機: https://s3f95k.csb.app/


ここでアニメ探してね
source code
<pre class="mw-collapsible mw-collapsed wikitable>
import React, { useState } from "react";
import { render } from "react-dom";
import {
  ApolloClient,
  InMemoryCache,
  ApolloProvider,
  useQuery,
  gql
} from "@apollo/client";


https://www.livechart.me/
const client = new ApolloClient({
  uri: "https://graphql.anilist.co/",
  cache: new InMemoryCache()
});


function template({ title, imgUrl, siteLink, type, prod, aniLink }) {
  return `
== ${title} ==


== 編集用テンプレ ==
<pre>== タイトル ==
{{infobox
{{infobox
|title= ""タイトル""
|title= ${title}
|image = [[ファイル:"ここにファイル名"|150px]]
|image = [[${imgUrl}|150px]]
|label1 = 公式サイト
|label1 = 公式サイト
|data1 = ""ここに公式サイトのURL""
|data1 = ${siteLink}
|label2 = 原作
|label2 = 原作
|data2 = ""ここに原作のメディア""
|data2 = ${type}
|label3 = 制作
|data3 = ${prod}
|label4 = ネット配信
|data4 = TBD
|label5 = List
|data5 = [${aniLink} Anilist]
}}
}}
=== あらすじ ===
=== あらすじ ===
""ここにあらすじ""
 
 
=== 主題歌 ===
 
==== OP ====
 
 
==== ED ====
 


=== レビュー ===
=== レビュー ===


{{テンプレート:CrepeQuote
{{テンプレート:CrepeQuote
|body= ""ここに内容""
|score=
|name= ""ここに自分の名前""
|body=
|name=
}}
}}
`;
}
const types = {
  ORIGINAL: "オリジナル",
  MANGA: "漫画",
  LIGHT_NOVEL: "ライトノベル",
  VISUAL_NOVEL: "ノベルゲーム",
  VIDEO_GAME: "ゲーム",
  OTHER: "その他",
  NOVEL: "小説",
  DOUJINSHI: "同人誌",
  ANIME: "アニメ",
  WEB_NOVEL: "ネット小説",
  LIVE_ACTION: "実写",
  GAME: "ゲーム",
  COMIC: "コミック",
  MULTIMEDIA_PROJECT: "マルチメディアプロジェクト",
  PICTURE_BOOK: "写真本"
};
function getType(type) {
  return types[type];
}
function AniTemp({ id }) {
  const { loading, error, data } = useQuery(
    gql`
      query MediaQ($id: Int!) {
        Media(id: $id) {
          title {
            native
          }
          source
          coverImage {
            extraLarge
          }
          siteUrl
          externalLinks {
            site
            url
          }
          studios(isMain: true) {
            nodes {
              name
            }
          }
        }
      }
    `,
    { variables: { id } }
  );
  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error :(</p>;
  console.log(data.Media.studios.nodes.map((v) => v.name).join(", "));
  const temp = template({
    title: data.Media.title.native,
    imgUrl: data.Media.coverImage.extraLarge,
    siteLink: data.Media.externalLinks
      .filter((v) => v.site.includes("Official"))
      .map((v) => v.url)
      .join(""),
    type: getType(data.Media.source),
    prod: data.Media.studios.nodes.map((v) => v.name).join(", "),
    aniLink: data.Media.siteUrl
  });
  return (
    <div>
      <textarea style={{ height: "200px" }} value={temp} />
      <p>
        <img src={data.Media.coverImage.extraLarge} />
      </p>
    </div>
  );
}
function Spotifyiframe() {
  const [url, setUrl] = useState("");
  const [out, setOut] = useState("");
  const change = (e) => {
    setUrl(e.target.value);
    try {
      const url = new URL(e.target.value);
      if (url.pathname.startsWith("/track/") && url.pathname.split("/")[2]) {
        setOut(url.pathname.split("/")[2]);
      }
      console.log(url);
    } catch (e) {}
  };
  return (
    <div>
      <h2>Spotify変換くん</h2>
      <span>URL: </span>
      <input type="text" value={url} onChange={change} />
      {out ? (
        <p>{`<iframe style="border-radius:12px;border:none;" src="https://open.spotify.com/embed/track/${out}" width="600" height="80" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>`}</p>
      ) : (
        <p>URLが正しくないよ</p>
      )}
    </div>
  );
}
function AMiframe() {
  const [url, setUrl] = useState("");
  const [out, setOut] = useState("");
  const change = (e) => {
    setUrl(e.target.value);
    try {
      const url = new URL(e.target.value);
      if (url.href.includes("https://music.apple.com/")) {
        setOut(url.href.replace("music.apple", "embed.music.apple"));
      }
      console.log(url);
    } catch (e) {}
  };
  return (
    <div>
      <h2>AppleMusic変換くん</h2>
      <span>URL: </span>
      <input type="text" value={url} onChange={change} />
      {out ? (
        <p>{`<iframe allow="autoplay *; encrypted-media *; fullscreen *; clipboard-write" frameborder="0" height="150" style="width:600px;max-width:660px;overflow:hidden;border-radius:10px;border:none;" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation" src="${out}"></iframe>`}</p>
      ) : (
        <p>URLが正しくないよ</p>
      )}
    </div>
  );
}
function App() {
  const [inpt, setInpt] = useState(0);
  const [id, setId] = useState(0);
  const change = (e) => setInpt(e.target.value);
  const set = () => setId(parseInt(inpt));
  return (
    <div>
      <h2>anilist</h2>
      ID: <input type="number" value={inpt} onChange={change} />{" "}
      <button onClick={set}>FETCH</button>
      {id > 0 ? <AniTemp id={id} /> : <p>set id</p>}
      <Spotifyiframe />
      <AMiframe />
    </div>
  );
}
render(
  <ApolloProvider client={client}>
    <App />
  </ApolloProvider>,
  document.getElementById("root")
);
</pre>
</pre>


34行目: 223行目:
|name=名前
|name=名前
}}
}}
</pre>
== 配信サイトのアイコン ==
<p>左から配信日時が早い順に3つぐらい並べられたらいいかな</p> 
<p>ウィキメディアコモンズの画像はアップロードしないと編集するとき重くなるっぽい</p> 
[[ファイル:Amazon icon.svg|24px|link=https://www.amazon.co.jp/dp/B08KL1KV3Y/]] [[ファイル:Animestore.png|24px|link=https://anime.dmkt-sp.jp/animestore/ci_pc?workId=24273]] [[ファイル:Netflix icon.svg|24px|link=https://www.netflix.com/jp/title/81333300]] [[ファイル:Cib-crunchyroll (CoreUI Icons v1.0.0) orange.svg|24px|link=https://www.crunchyroll.com/]] [[ファイル:AbemaTV logo.svg|64px|link=https://abema.tv/video/title/174-18]] [[ファイル:YouTube Logo 2017.svg|64px|link=https://www.youtube.com/channel/UCTapYnNnw0KqWoCMGgCs4wg/featured]] [[ファイル:Niconico(2020).svg|48px|link=https://www.nicovideo.jp/]] [[ファイル:Hulu_Logo.svg|48px|link=https://www.hulu.jp/downtown-no-gaki-no-tsukai-ya-arahende-zettai-ni-waratte-wa-ikenai-batsugeemu-series]] [[ファイル:Prime_Video.svg.png|64px|link=https://www.amazon.co.jp/gp/video/detail/B09KHHRF6L/]]
<pre>
[[ファイル:Amazon icon.svg|24px|link=]]
[[ファイル:Animestore.png|24px|link=]]
[[ファイル:Netflix icon.svg|24px|link=]]
[[ファイル:Cib-crunchyroll (CoreUI Icons v1.0.0) orange.svg|24px|link=]]
[[ファイル:AbemaTV logo.svg|64px|link=]]
[[ファイル:YouTube Logo 2017.svg|64px|link=]]
[[ファイル:Niconico(2020).svg|48px|link=]]
[[ファイル:Hulu_Logo.svg|48px|link=]]
[[ファイル:Prime_Video.svg.png|64px|link=]]
</pre>
</pre>

2024年7月13日 (土) 16:42時点における最新版

テンプレ作成機: https://s3f95k.csb.app/

source code

import React, { useState } from "react";
import { render } from "react-dom";
import {
  ApolloClient,
  InMemoryCache,
  ApolloProvider,
  useQuery,
  gql
} from "@apollo/client";

const client = new ApolloClient({
  uri: "https://graphql.anilist.co/",
  cache: new InMemoryCache()
});

function template({ title, imgUrl, siteLink, type, prod, aniLink }) {
  return `
== ${title} ==

{{infobox
|title= ${title}
|image = [[${imgUrl}|150px]]
|label1 = 公式サイト
|data1 = ${siteLink}
|label2 = 原作
|data2 = ${type}
|label3 = 制作
|data3 = ${prod}
|label4 = ネット配信
|data4 = TBD
|label5 = List
|data5 = [${aniLink} Anilist]
}}

=== あらすじ ===


=== 主題歌 ===

==== OP ====


==== ED ====


=== レビュー ===

{{テンプレート:CrepeQuote
|score=
|body=
|name=
}}
`;
}

const types = {
  ORIGINAL: "オリジナル",
  MANGA: "漫画",
  LIGHT_NOVEL: "ライトノベル",
  VISUAL_NOVEL: "ノベルゲーム",
  VIDEO_GAME: "ゲーム",
  OTHER: "その他",
  NOVEL: "小説",
  DOUJINSHI: "同人誌",
  ANIME: "アニメ",
  WEB_NOVEL: "ネット小説",
  LIVE_ACTION: "実写",
  GAME: "ゲーム",
  COMIC: "コミック",
  MULTIMEDIA_PROJECT: "マルチメディアプロジェクト",
  PICTURE_BOOK: "写真本"
};

function getType(type) {
  return types[type];
}

function AniTemp({ id }) {
  const { loading, error, data } = useQuery(
    gql`
      query MediaQ($id: Int!) {
        Media(id: $id) {
          title {
            native
          }
          source
          coverImage {
            extraLarge
          }
          siteUrl
          externalLinks {
            site
            url
          }
          studios(isMain: true) {
            nodes {
              name
            }
          }
        }
      }
    `,
    { variables: { id } }
  );

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error :(</p>;
  console.log(data.Media.studios.nodes.map((v) => v.name).join(", "));
  const temp = template({
    title: data.Media.title.native,
    imgUrl: data.Media.coverImage.extraLarge,
    siteLink: data.Media.externalLinks
      .filter((v) => v.site.includes("Official"))
      .map((v) => v.url)
      .join(""),
    type: getType(data.Media.source),
    prod: data.Media.studios.nodes.map((v) => v.name).join(", "),
    aniLink: data.Media.siteUrl
  });

  return (
    <div>
      <textarea style={{ height: "200px" }} value={temp} />
      <p>
        <img src={data.Media.coverImage.extraLarge} />
      </p>
    </div>
  );
}

function Spotifyiframe() {
  const [url, setUrl] = useState("");
  const [out, setOut] = useState("");

  const change = (e) => {
    setUrl(e.target.value);
    try {
      const url = new URL(e.target.value);
      if (url.pathname.startsWith("/track/") && url.pathname.split("/")[2]) {
        setOut(url.pathname.split("/")[2]);
      }
      console.log(url);
    } catch (e) {}
  };

  return (
    <div>
      <h2>Spotify変換くん</h2>
      <span>URL: </span>
      <input type="text" value={url} onChange={change} />
      {out ? (
        <p>{`<iframe style="border-radius:12px;border:none;" src="https://open.spotify.com/embed/track/${out}" width="600" height="80" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>`}</p>
      ) : (
        <p>URLが正しくないよ</p>
      )}
    </div>
  );
}

function AMiframe() {
  const [url, setUrl] = useState("");
  const [out, setOut] = useState("");

  const change = (e) => {
    setUrl(e.target.value);
    try {
      const url = new URL(e.target.value);
      if (url.href.includes("https://music.apple.com/")) {
        setOut(url.href.replace("music.apple", "embed.music.apple"));
      }
      console.log(url);
    } catch (e) {}
  };

  return (
    <div>
      <h2>AppleMusic変換くん</h2>
      <span>URL: </span>
      <input type="text" value={url} onChange={change} />
      {out ? (
        <p>{`<iframe allow="autoplay *; encrypted-media *; fullscreen *; clipboard-write" frameborder="0" height="150" style="width:600px;max-width:660px;overflow:hidden;border-radius:10px;border:none;" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation" src="${out}"></iframe>`}</p>
      ) : (
        <p>URLが正しくないよ</p>
      )}
    </div>
  );
}

function App() {
  const [inpt, setInpt] = useState(0);
  const [id, setId] = useState(0);

  const change = (e) => setInpt(e.target.value);
  const set = () => setId(parseInt(inpt));
  return (
    <div>
      <h2>anilist</h2>
      ID: <input type="number" value={inpt} onChange={change} />{" "}
      <button onClick={set}>FETCH</button>
      {id > 0 ? <AniTemp id={id} /> : <p>set id</p>}
      <Spotifyiframe />
      <AMiframe />
    </div>
  );
}

render(
  <ApolloProvider client={client}>
    <App />
  </ApolloProvider>,
  document.getElementById("root")
);

レビュー用テンプレ

{{テンプレート:CrepeQuote
|score=40
|body= ここに内容
|name=名前
}}

配信サイトのアイコン

左から配信日時が早い順に3つぐらい並べられたらいいかな

ウィキメディアコモンズの画像はアップロードしないと編集するとき重くなるっぽい

Amazon icon.svg Animestore.png Netflix icon.svg Cib-crunchyroll (CoreUI Icons v1.0.0) orange.svg AbemaTV logo.svg YouTube Logo 2017.svg Niconico(2020).svg Hulu Logo.svg Prime Video.svg.png


[[ファイル:Amazon icon.svg|24px|link=]] 

[[ファイル:Animestore.png|24px|link=]]

[[ファイル:Netflix icon.svg|24px|link=]]

[[ファイル:Cib-crunchyroll (CoreUI Icons v1.0.0) orange.svg|24px|link=]]

[[ファイル:AbemaTV logo.svg|64px|link=]] 

[[ファイル:YouTube Logo 2017.svg|64px|link=]] 

[[ファイル:Niconico(2020).svg|48px|link=]] 

[[ファイル:Hulu_Logo.svg|48px|link=]]

[[ファイル:Prime_Video.svg.png|64px|link=]]