刘耀文

刘耀文

java开发者
github

shiro メモ

shiro アップグレード#

mkdir shiro
cd shiro
wget https://raw.githubusercontent.com/Innei/Shiro/main/docker-compose.yml
wget https://raw.githubusercontent.com/Innei/Shiro/main/.env.template .env

vim .env # あなたの ENV 変数を変更
docker compose up -d

docker compose pull # 後続のイメージを更新

LinkCard コンポーネントの使用#

設定 (参考追加機能 | Mix Space (mx-space.js.org))#

  • GitHub、デフォルトでブラウザから直接アクセスしますが、レート制限の影響を受ける可能性があります。API の到達性を確保するために GH_TOKEN を入力できます。
  • TMDB、正しく tmdb のリンクを解析するには TMDB_API_KEY を入力する必要があります。TOKEN を取得するには https://post.smzdm.com/p/a5op4w33/(新しいタブで開く) を参照してください。

使用方法#

拡張構文は gh と gh-commit 構文のみで、他には見つかりませんでした。ソースコードを確認する [LinkCard.tsx - Shiro GitHub] - Visual Studio Code - GitHubによると、以下の種類があります。#

  • その中で source は以下の種類をサポートしています。
<LinkCard source="gh-commit" id="mx-space/kami/commit/e1eee4136c21ab03ab5690e17025777984c362a0">
export enum LinkCardSource {
  GHRepo = 'gh-repo',
  Self = 'self',
  MixSpace = 'mx-space',
  GHCommit = 'gh-commit',
  GHPr = 'gh-pr',
  TMDB = 'tmdb',
}
  • 次にリクエストデータの方法を見て、idの記入方法を見つけます。

github

<LinkCard source="gh-repo" id="owner/repo">
実際のリクエスト:https://api.github.com/repos/${owner}/${repo}

GitHubCommitsad

username/repo/commit/commitId
<LinkCard source="gh-commit" id="username/repo/commit/commitId">
実際のリクエスト:https://api.github.com/repos/${owner}/${repo}/commits/${commitId}

GitHubPR

${owner}/${repo}/${pr}
<LinkCard source="gh-pr" id="owner/repo/pr">
実際のリクエスト:https://api.github.com/repos/${owner}/${repo}/pulls/${prNumber}

MxSpace

posts/cate/slug または notes/nid
<LinkCard source="mx-space" id="posts/cate/slugr"> または <LinkCard source="mx-space" id="notes/nid">
コードロジック:
if (type === 'posts') {
    const [cate, slug] = rest
    const response = await apiClient.post.getPost(cate, slug)
    data = response
    setFullUrl(`/posts/${cate}/${slug}`)
  } else if (type === 'notes') {
    const [nid] = rest
    const response = await apiClient.note.getNoteById(+nid)
    data = response.data
    setFullUrl(`/notes/${nid}`)
  }

TheMovieDB

tv/id または movie/id
<LinkCard source="tmdb" id="tv/id"> または <LinkCard source="tmdb" id="movie/id">

TMDB リクエストのアクセス問題#

解決策 1#

最も簡単な解決策は、サーバーにプロキシを追加することですが、私はこの方法を選びませんでした。サーバーにプロキシルールとサブスクリプションを維持するのは面倒です。

解決策 2#

CloudFlare のワーカーを利用して TMDB のリクエストをプロキシします。原理は、TMDB に送信されるリクエストを最初に CloudFlare に送信し、CloudFlare が私たちのためにデータをリクエストします。CloudFlare はブロックされていませんが、デフォルトのドメインworkers.devはブロックされているため、自分のドメインをバインドする必要があります。

  1. ドメインを登録

namesiloを使用してドメインを登録します。オンラインには多くのチュートリアルがありますので、Cloudflare に転送し、チュートリアルを繰り返すことについては説明しません。

  1. CloudFlare でワーカーを作成します。ここで私は innei さんのコードを改造し、コードをワーカーにデプロイしました。
export default {
  async fetch(request) {
    // リクエストからパスとクエリパラメータを解析
    const url = new URL(request.url);
    const pathname = url.pathname.split('/').slice(3);
    const query = url.searchParams;

    query.delete('all'); // 不要なクエリパラメータを削除

    // 許可されるパスタイプと長さを設定
    const allowedTypes = ['tv', 'movie'];
    const allowedPathLength = 2;
    if (
      pathname.length > allowedPathLength ||
      !allowedTypes.includes(pathname[0])
    ) {
      return new Response('このリクエストは許可されていません', { status: 400 });
    }

    const searchString = query.toString();

    // TMDB API キー
    const TMDB_API_KEY = "************************"; /

    // API キーが存在するか確認
    if (!TMDB_API_KEY) {
      return new Response('TMDB_API_KEYが設定されていません', { status: 500 });
    }

    // TMDB APIの完全なURLを構築
    const apiUrl = `https://api.themoviedb.org/3/${pathname.join('/')}${
      searchString ? `?${searchString}&api_key=${TMDB_API_KEY}` : `?api_key=${TMDB_API_KEY}`
    }`;

    try {
      // リクエストヘッダーを設定
      const headers = new Headers();
      headers.set(
        'User-Agent',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko), Shiro',
      );

      // TMDB APIにリクエストを送信
      const response = await fetch(apiUrl, { headers });
      const data = await response.json();

      // レスポンスを返す
      return new Response(JSON.stringify(data), {
        headers: { 'Content-Type': 'application/json' },
      });
    } catch (error) {
      return new Response('データ取得中にエラーが発生しました', { status: 500 });
    }
  }
}

設定が完了したら、以下のようなインターフェースになります。

image-20240821005837320

  1. ステップ 1 のドメインを現在のワーカーにバインドし、設定が完了したら以下のようになります。

image-20240821005940495

  1. これでカスタムドメインを通じて TMDBAPI にアクセスできるようになります。
https://xxxxxx.xxx/api/tmdb/movie/1299537?language=zh-CN
  1. shiro のアクセスアドレスを先ほどデプロイしたワーカーにリバースプロキシします。

    location /api/tmdb {
        proxy_pass http://liuyaowen.top;
        proxy_set_header Host liuyaowen.top;
    
    }
    

    上記の proxy_set_header Host liuyaowen.top; は必ず変更してください。そうしないと、Please enable cookies. Error 1001ページが表示されます。

  2. 最後にノートにアクセスすると、あれ、どうしてクロスオリジンになったのか。Cloudflare のドメインとあなたのウェブサイトのドメインが異なるため、クロスオリジンを設定する必要があります。Cloudflare であなたのドメインを設定し、変換ルールを追加します。

    image-20240821010506038

  3. これで、TMDB の LinkCard コンポーネントを楽しく使用できるようになります。

この記事は Mix Space によって xLog に同期更新されました。元のリンクは https://me.liuyaowen.club/notes/2

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。