Integrace více prostředků Asistivní čtečka
V přehledu jste se dozvěděli o Asistivní čtečka a o tom, jak implementuje osvědčené techniky ke zlepšení porozumění čtení pro studenty jazyků, nově vznikající čtenáře a studenty s rozdíly ve studiu. V rychlém startu jste zjistili, jak používat Asistivní čtečka s jedním prostředkem. V tomto kurzu se dozvíte, jak integrovat více prostředků Asistivní čtečka do stejné aplikace.
V tomto kurzu se naučíte:
- Vytvořte více Asistivní čtečka prostředek pod existující skupinou prostředků.
- Spusťte Asistivní čtečka pomocí více prostředků.
Požadavky
- Předplatné Azure. Pokud žádné nemáte, vytvořte si bezplatný účet.
- Jeden Asistivní čtečka prostředek nakonfigurovaný pro ověřování Microsoft Entra. Podle těchto pokynů se řiďte nastavením.
- Webová aplikace NodeJS, která spouští Asistivní čtečka
Vytvoření několika prostředků
Podle těchto pokynů znovu vytvořte každý prostředek Asistivní čtečka. Skript Create-ImmersiveReaderResource
má ResourceName
parametr , ResourceSubdomain
a ResourceLocation
jako parametry. Tyto parametry by měly být jedinečné pro každý vytvořený prostředek. Zbývající parametry by měly být stejné jako parametry, které jste použili při nastavování prvního Asistivní čtečka prostředku. Každý prostředek tak může být propojený se stejnou skupinou prostředků Azure a aplikací Microsoft Entra.
Následující příklad ukazuje, jak vytvořit dva prostředky, jeden v oblasti WestUS a druhý v oblasti EastUS. Každý prostředek má jedinečné hodnoty pro ResourceName
, ResourceSubdomain
a ResourceLocation
.
Create-ImmersiveReaderResource
-SubscriptionName <SUBSCRIPTION_NAME>
-ResourceName Resource_name_westus
-ResourceSubdomain resource-subdomain-westus
-ResourceSKU <RESOURCE_SKU>
-ResourceLocation westus
-ResourceGroupName <RESOURCE_GROUP_NAME>
-ResourceGroupLocation <RESOURCE_GROUP_LOCATION>
-AADAppDisplayName <MICROSOFT_ENTRA_DISPLAY_NAME>
-AADAppIdentifierUri <MICROSOFT_ENTRA_IDENTIFIER_URI>
-AADAppClientSecret <MICROSOFT_ENTRA_CLIENT_SECRET>
Create-ImmersiveReaderResource
-SubscriptionName <SUBSCRIPTION_NAME>
-ResourceName Resource_name_eastus
-ResourceSubdomain resource-subdomain-eastus
-ResourceSKU <RESOURCE_SKU>
-ResourceLocation eastus
-ResourceGroupName <RESOURCE_GROUP_NAME>
-ResourceGroupLocation <RESOURCE_GROUP_LOCATION>
-AADAppDisplayName <MICROSOFT_ENTRA_DISPLAY_NAME>
-AADAppIdentifierUri <MICROSOFT_ENTRA_IDENTIFIER_URI>
-AADAppClientSecret <MICROSOFT_ENTRA_CLIENT_SECRET>
Přidání prostředků do konfigurace prostředí
V rychlém startu jste vytvořili konfigurační soubor prostředí, který obsahuje TenantId
parametry , ClientId
, ClientSecret
a Subdomain
parametry. Vzhledem k tomu, že všechny vaše prostředky používají stejnou aplikaci Microsoft Entra, můžete použít stejné hodnoty pro TenantId
, ClientId
a ClientSecret
. Jedinou změnou, kterou je potřeba provést, je vypsat každou subdoménu pro každý prostředek.
Váš nový soubor .env by teď měl vypadat nějak takto:
TENANT_ID={YOUR_TENANT_ID}
CLIENT_ID={YOUR_CLIENT_ID}
CLIENT_SECRET={YOUR_CLIENT_SECRET}
SUBDOMAIN_WUS={YOUR_WESTUS_SUBDOMAIN}
SUBDOMAIN_EUS={YOUR_EASTUS_SUBDOMAIN}
Poznámka:
Nezapomeňte tento soubor potvrdit do správy zdrojového kódu, protože obsahuje tajné kódy, které by se neměly zveřejnit.
Dále upravte soubory routes\index.js , které jste vytvořili, aby podporovaly více prostředků. Nahraďte jeho obsah následujícím kódem.
Stejně jako předtím tento kód vytvoří koncový bod rozhraní API, který získá ověřovací token Microsoft Entra pomocí hesla instančního objektu. Tentokrát umožní uživateli zadat umístění prostředku a předat ho jako parametr dotazu. Pak vrátí objekt obsahující token a odpovídající subdoménu.
var express = require('express');
var router = express.Router();
var request = require('request');
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.get('/GetTokenAndSubdomain', function(req, res) {
try {
request.post({
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
url: `https://login.windows.net/${process.env.TENANT_ID}/oauth2/token`,
form: {
grant_type: 'client_credentials',
client_id: process.env.CLIENT_ID,
client_secret: process.env.CLIENT_SECRET,
resource: 'https://cognitiveservices.azure.com/'
}
},
function(err, resp, tokenResult) {
if (err) {
console.log(err);
return res.status(500).send('CogSvcs IssueToken error');
}
var tokenResultParsed = JSON.parse(tokenResult);
if (tokenResultParsed.error) {
console.log(tokenResult);
return res.send({error : "Unable to acquire Azure AD token. Check the debugger for more information."})
}
var token = tokenResultParsed.access_token;
var subdomain = "";
var region = req.query && req.query.region;
switch (region) {
case "eus":
subdomain = process.env.SUBDOMAIN_EUS
break;
case "wus":
default:
subdomain = process.env.SUBDOMAIN_WUS
}
return res.send({token, subdomain});
});
} catch (err) {
console.log(err);
return res.status(500).send('CogSvcs IssueToken error');
}
});
module.exports = router;
Koncový getimmersivereaderlaunchparams
bod rozhraní API by měl být zabezpečený za určitou formou ověřování (například OAuth), aby zabránil neoprávněným uživatelům v získání tokenů, které se mají použít pro vaši službu Asistivní čtečka a fakturaci. Tato práce je nad rámec tohoto kurzu.
Přidání ukázkového obsahu
Otevřete zobrazení\index.pug a nahraďte jeho obsah následujícím kódem. Tento kód naplní stránku nějakým ukázkovým obsahem a přidá dvě tlačítka, která spustí Asistivní čtečka. Ten, který spustí Asistivní čtečka pro prostředek EastUS a druhý pro prostředek WestUS.
doctype html
html
head
title Immersive Reader Quickstart Node.js
link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css')
// A polyfill for Promise is needed for IE11 support.
script(src='https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js')
script(src='https://ircdname.azureedge.net/immersivereadersdk/immersive-reader-sdk.1.2.0.js')
script(src='https://code.jquery.com/jquery-3.3.1.min.js')
style(type="text/css").
.immersive-reader-button {
background-color: white;
margin-top: 5px;
border: 1px solid black;
float: right;
}
body
div(class="container")
button(class="immersive-reader-button" data-button-style="icon" data-locale="en" onclick='handleLaunchImmersiveReader("wus")') WestUS Immersive Reader
button(class="immersive-reader-button" data-button-style="icon" data-locale="en" onclick='handleLaunchImmersiveReader("eus")') EastUS Immersive Reader
h1(id="ir-title") About Immersive Reader
div(id="ir-content" lang="en-us")
p Immersive Reader is a tool that implements proven techniques to improve reading comprehension for emerging readers, language learners, and people with learning differences. The Immersive Reader is designed to make reading more accessible for everyone. The Immersive Reader
ul
li Shows content in a minimal reading view
li Displays pictures of commonly used words
li Highlights nouns, verbs, adjectives, and adverbs
li Reads your content out loud to you
li Translates your content into another language
li Breaks down words into syllables
h3 The Immersive Reader is available in many languages.
p(lang="es-es") El Lector inmersivo está disponible en varios idiomas.
p(lang="zh-cn") 沉浸式阅读器支持许多语言
p(lang="de-de") Der plastische Reader ist in vielen Sprachen verfügbar.
p(lang="ar-eg" dir="rtl" style="text-align:right") يتوفر \"القارئ الشامل\" في العديد من اللغات.
script(type="text/javascript").
function getTokenAndSubdomainAsync(region) {
return new Promise(function (resolve, reject) {
$.ajax({
url: "/GetTokenAndSubdomain",
type: "GET",
data: {
region: region
},
success: function (data) {
if (data.error) {
reject(data.error);
} else {
resolve(data);
}
},
error: function (err) {
reject(err);
}
});
});
}
function handleLaunchImmersiveReader(region) {
getTokenAndSubdomainAsync(region)
.then(function (response) {
const token = response["token"];
const subdomain = response["subdomain"];
// Learn more about chunk usage and supported MIME types https://learn.microsoft.com/azure/ai-services/immersive-reader/reference#chunk
const data = {
title: $("#ir-title").text(),
chunks: [{
content: $("#ir-content").html(),
mimeType: "text/html"
}]
};
// Learn more about options https://learn.microsoft.com/azure/ai-services/immersive-reader/reference#options
const options = {
"onExit": exitCallback,
"uiZIndex": 2000
};
ImmersiveReader.launchAsync(token, subdomain, data, options)
.catch(function (error) {
alert("Error in launching the Immersive Reader. Check the console.");
console.log(error);
});
})
.catch(function (error) {
alert("Error in getting the Immersive Reader token and subdomain. Check the console.");
console.log(error);
});
}
function exitCallback() {
console.log("This is the callback function. It is executed when the Immersive Reader closes.");
}
Vaše webová aplikace je teď připravená. Spusťte aplikaci spuštěním následujícího příkazu:
npm start
Otevřete prohlížeč a přejděte na http://localhost:3000
. Na stránce by se měl zobrazit výše uvedený obsah. Vyberte tlačítko Asistivní čtečka EastUS nebo tlačítko Asistivní čtečka WestUS a spusťte Asistivní čtečka pomocí příslušných prostředků.