dev APIとnetlify関数で最近の投稿を表示する
21794 ワード
このポストで説明された方法はJavaScriptフレームワーク、CMS、または静的サイトジェネレーターを必要としない単純なHTMLサイトで動作しますが、これらの環境にも拡張できます.
これらの手順を使用して、任意の利用可能なAPIではなく、devだけでなく、簡単にあなたの静的サイトにNetLifyでホストされてライブデータをプルすることができます.この純粋な静的なHTMLバージョンでは、データはすべてのページ負荷で更新され、新しいポストを発行するときに起動するビルドを必要としません.
このチュートリアルのための唯一の要件は、少なくとも1つの公開されたポスト、およびNetlify ホストアカウント.
あなたが達成できることについての参照のために、ここにありますa live demo スターターのこのチュートリアルから完全なコードで作成しました.
テンプレートオプションを使用しますstarter repo あなたがちょうどあなたのdev柱を表示するサイトを得るために' n GO 'をつかむのが好きであるならば、ちょっとREADME情報をチェックしてください.
NET Lifeyでホストされている既存のプロジェクトに統合したい場合、および基本プロジェクトを拡張するのに役立つように設定する方法について説明します.
devでは、ログインして、APIキーを生成して生成してください
Login to Netlify そして、あなたのサイトを選択し、設定内で
Netlify functions それ以外の場合は本当にスタティックサイトであるAPI上で安全にAPIを問い合わせることができます.
まず、netlify関数を格納するディレクトリを作成します.これはnetlify設定関数のいずれかを定義します.
例
JavaScriptを使用して機能を記述し、Axiosを使用して、dev APIから投稿を取得します.
Axiosはあなたのローカルには必要ありません
Axiosは、dev APIの結果を得るために使用され、カスタマイズされたAPIで表示したいものをカスタマイズするためにそれらをマップします.私たちは
ブランチ配置が有効になっていない場合は、プレビューの展開で機能と結果を確認できるようにします.それはNetlifyの超素晴らしい機能です、そして、あなたは設定からそれを使用するために更新することができます.あなたは確かにこの更新プログラムを作った後に復帰することができます.
変更をコミットすることができます.ビルドが発行されると、展開URLをクリックしてプレビューURLを起動できます.
一度公開されたすべての機能は、以下の形式でサイトから入手できます.
Corsのため、ローカルビルドからリモートエンドポイントを取得できません.
これで2つのオプションがあります.結果をローカルのファイルにコピーしてテストしたり、セットアップをしたりしますNetlify CLI ローカル関数をビルドする.
私はそれがより初心者に優しいとして、ローカルデータオプションを続行するつもりです.
そのため、エンドポイントの内容をローカルファイルにコピーします
あなたのウェブサイトプロジェクトで新しいJavascriptファイルを作成します.
まず、netlifyエンドポイントURLの値を保持する変数を設定します
HTMLファイル内の出力の場所を定義する必要があります.
ポストを表示するには、次のプレースホルダを作成します.
その後、先に行くとスクリプトタグのソースを追加する
バック・イン
それが通過されていることを思い出してください
次に、テンプレートリテラルを使ってテンプレートを定義し、データを
あなたがそれを必要とするならば、ViewPortサイズに従って1 - 3の自動列でCSSグリッドを置くためにCSS Gridを使用する応答的な「カード」を生産する最小限のCSSはここにあります
あなたの変更をコミットして、もう一度NetLifyブランチプレビューについてレビューしてください.
それがそうするならば、残っているすべてはあなたが準備ができているとき、生きているサイト配備のためにあなたのマスター支店に合併することです!🚀
オープン
オープン
で使用されるマークアップについて何かを変更することができます
表示する追加API値を追加する場合は、前のセクションを確認してください.
IE 11またはサポートの下で必要な場合は
これらの手順を使用して、任意の利用可能なAPIではなく、devだけでなく、簡単にあなたの静的サイトにNetLifyでホストされてライブデータをプルすることができます.この純粋な静的なHTMLバージョンでは、データはすべてのページ負荷で更新され、新しいポストを発行するときに起動するビルドを必要としません.
このチュートリアルのための唯一の要件は、少なくとも1つの公開されたポスト、およびNetlify ホストアカウント.
あなたが達成できることについての参照のために、ここにありますa live demo スターターのこのチュートリアルから完全なコードで作成しました.
テンプレートオプションを使用しますstarter repo あなたがちょうどあなたのdev柱を表示するサイトを得るために' n GO 'をつかむのが好きであるならば、ちょっとREADME情報をチェックしてください.
NET Lifeyでホストされている既存のプロジェクトに統合したい場合、および基本プロジェクトを拡張するのに役立つように設定する方法について説明します.
ステップ1 : dev APIキーを取得する
devでは、ログインして、APIキーを生成して生成してください
ステップ2 :環境変数を作成する
Login to Netlify そして、あなたのサイトを選択し、設定内で
DEVTO
あなたのdev APIキーである値で.ステップ3 : netlify関数を作成する
Netlify functions それ以外の場合は本当にスタティックサイトであるAPI上で安全にAPIを問い合わせることができます.
まず、netlify関数を格納するディレクトリを作成します.これはnetlify設定関数のいずれかを定義します.
netlify.toml
netlifyが存在するようにファイルを処理します.例
netlify.toml
定義された関数ディレクトリを持つファイル[build]
# Directory with the serverless Lambda functions to deploy to AWS.
functions = "functions"
シンプルにするにはfunctions/devto.js
プロジェクトのルートで.JavaScriptを使用して機能を記述し、Axiosを使用して、dev APIから投稿を取得します.
Axiosはあなたのローカルには必要ありません
package.json
netlifyは関数の処理に含まれます.しかし、必要とすることから始めます.const axios = require("axios");
次に、ユーザの公開された記事のベースAPI URLで変数を作成します9
返り値:const apiRoot = "https://dev.to/api/articles/me/published?per_page=9";
次に、プライマリ関数ハンドラを作成します.これはかなり柔軟です、キーは我々が我々の終点に表示されるものを返すということですcallback
ハンドラに渡される関数.Axiosは、dev APIの結果を得るために使用され、カスタマイズされたAPIで表示したいものをカスタマイズするためにそれらをマップします.私たちは
title
, url
, description
, and tags
. 私たちはjoin
でtag_list
表示用の単純な文字列を作成するにはexports.handler = async (event, context, callback) => {
try {
const { data } = await axios.get(apiRoot, { headers: { "api-key": process.env.DEVTO } });
let response = [];
// Grab the items and re-format to the fields we want
if (data.length) {
response = data.map((item) => ({
title: item.title,
url: item.url,
description: item.description,
tags: item.tag_list.join(", "),
}));
}
callback(null, {
statusCode: 200,
body: JSON.stringify(response),
});
} catch (err) {
callback(err);
}
};
信用Raymond and Andy その実現は、私を正しい方向に導くのを助けましたステップ4 :機能を公開する
ブランチ配置が有効になっていない場合は、プレビューの展開で機能と結果を確認できるようにします.それはNetlifyの超素晴らしい機能です、そして、あなたは設定からそれを使用するために更新することができます.あなたは確かにこの更新プログラムを作った後に復帰することができます.
変更をコミットすることができます.ビルドが発行されると、展開URLをクリックしてプレビューURLを起動できます.
一度公開されたすべての機能は、以下の形式でサイトから入手できます.
[preview-url]/.netlify/[functionsdir]/[functionname]
このためには、次のようにします.[preview-url]/.netlify/functions/devto
ペイロードの例は次のようになります.[
{
"title": "CSS-Only Accessible Dropdown Navigation Menu",
"url": "https://dev.to/5t3ph/css-only-accessible-dropdown-navigation-menu-1f95",
"description": "This is the seventh post in a series examining modern CSS solutions to problems I've been solving ov...",
"tags": "css, html, webdev, a11y"
},
// ...and so on
]
ローカルテストデータ
Corsのため、ローカルビルドからリモートエンドポイントを取得できません.
これで2つのオプションがあります.結果をローカルのファイルにコピーしてテストしたり、セットアップをしたりしますNetlify CLI ローカル関数をビルドする.
私はそれがより初心者に優しいとして、ローカルデータオプションを続行するつもりです.
そのため、エンドポイントの内容をローカルファイルにコピーします
postdata.json
を使用すると、.gitignore
. 次のステップを構築するためにこのファイルを参照します.ステップ6 : netlifyエンドポイントからデータを取得する
あなたのウェブサイトプロジェクトで新しいJavascriptファイルを作成します.
posts.js
.まず、netlifyエンドポイントURLの値を保持する変数を設定します
window.location.port
値をローカルのビルドと変更し、ローカルのテストデータファイルを指すように変更します.let postsApi = "/.netlify/functions/devto";
// Use local test data if not live site
if(window.location.port) {
postsApi = "/js/postdata.json";
}
次に、使用しますfetch
結果を得るには、文字列化されたデータをJSONに変換し、次に次の関数をカスタム関数に渡します.fetch(postsApi, {
method: "GET",
})
.then((response) => response.json())
.then((data) => {
// Pass to post template and output function
createPostList(data);
})
.catch((error) => {
console.error("Error:", error);
});
ステップ7 :投稿プレースホルダを定義する
HTMLファイル内の出力の場所を定義する必要があります.
ポストを表示するには、次のプレースホルダを作成します.
<div class="posts"></div>
重要な部分はプレースホルダを見つけるために使うクラスです.あなたの選択、またはクラスのそれを更新することができますid
あなたが好むならば.その後、先に行くとスクリプトタグのソースを追加する
posts.js
閉じる前にHTMLファイルの最後に</body>
タグ<script src="js/posts.js"></script>
ステップ8 :表示機能を作成する
バック・イン
posts.js
, ファイルの先頭にある最初のことは、プレースホルダを参照する変数を作成することです.const postList = document.querySelector(".posts");
それから、それを書く時間ですcreatePostList
関数.それが通過されていることを思い出してください
body
すでにカスタマイズされたデータの中で、私たちはそれぞれをマップしますpost
, 使用destructuring 簡単にポストデータの各部分の値へのアクセスを得るために.次に、テンプレートリテラルを使ってテンプレートを定義し、データを
li
と他の適切なHTML要素.const createPostList = (posts) => {
const items = posts.map((post) => {
const {
title,
url,
description,
tags
} = post;
return `<li class="card">
<div class="card__content">
<a href="${url}" class="card__title">${title}</a>
<p>${description}</p>
<em>${tags}</em>
</div>
</div>
</li>`;
});
const list = `<ul class="card-wrapper" role="list">${items.join("")}</ul>`;
postList.innerHTML = list;
postList.classList.add("loaded");
}
この関数はli
into ul
, そして最後に完成したリストをプレースホルダにinnerHTML
, とloaded
データが存在するならば、あなたが起ころうとするどんなCSSのためのクラスでも.オプション:最小カードレイアウト
あなたがそれを必要とするならば、ViewPortサイズに従って1 - 3の自動列でCSSグリッドを置くためにCSS Gridを使用する応答的な「カード」を生産する最小限のCSSはここにあります
.posts {
// Reduce jarring effect when posts loaded and height adjusts if you have other elements on your page
min-height: 60vh;
transition: 320ms opacity ease-in;
opacity: 0;
}
.posts.loaded {
// Fade in to make appearance more pleasant
opacity: 1;
}
.card-wrapper {
display: grid;
grid-gap: 2em;
grid-template-columns: repeat(auto-fit, minmax(25ch, 1fr));
padding-left: 0;
list-styles: none;
}
.card {
display: flex;
flex-direction: column;
border-radius: 8px;
background-color: #fff;
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.18);
}
.card__title {
margin-bottom: 1rem;
color: blue;
text-decoration: none;
}
.card__content {
position: relative;
display: flex;
flex-direction: column;
flex-grow: 1;
padding: 24px;
}
.card__content p {
line-height: 1.4;
margin: 0 0 1rem;
}
.card__content *:last-child {
margin-top: auto;
}
ステップ8 :コミットとプレビュー展開
あなたの変更をコミットして、もう一度NetLifyブランチプレビューについてレビューしてください.
それがそうするならば、残っているすべてはあなたが準備ができているとき、生きているサイト配備のためにあなたのマスター支店に合併することです!🚀
APIオプションとカスタマイズ
返還郵便番号
オープン
functions/devto.js
そして$apiRoot
変数変更per_page
値.dev APIは1000までの値を許容します.これは、ページネーションを処理するために拡張することができます.返り値
オープン
functions/devto.js
生成されたマップで、必要に応じて値を追加または削除します.返されたAPIオブジェクトのサンプルです.テンプレートの変更
で使用されるマークアップについて何かを変更することができます
createPostList
関数.表示する追加API値を追加する場合は、前のセクションを確認してください.
IE 11またはサポートの下で必要な場合は
js/posts.js
通してonline Babel compiler POSTテンプレートを作成するために使用するテンプレートリテラルに別の方法を生成します.Reference
この問題について(dev APIとnetlify関数で最近の投稿を表示する), 我々は、より多くの情報をここで見つけました https://dev.to/5t3ph/display-recent-posts-with-the-dev-api-and-netlify-functions-260jテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol