다음을 통해 공유


웹 피드 항목을 관리하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

이 항목에서는 Atom Publication Protocol의 Windows 런타임 구현인 Windows.Web.AtomPub 네임스페이스를 사용하여 서비스 문서에 액세스하고 문서에 포함된 피드 리소스를 수정하는 방법을 보여 줍니다.

사전 요구 사항

다음 예에서는 JavaScript를 사용하며 AtomPub 샘플(영문)을 기반으로 합니다. JavaScript를 사용하여 Windows 런타임 앱을 만드는 방법에 대한 일반적인 내용은 JavaScript를 사용하여 첫 번째 Windows 런타임 앱 만들기를 참조하세요. 또한 JavaScript Promise는 이 항목에서 비동기 작업을 완료하는 데 사용됩니다. 이 프로그래밍 패턴에 대한 자세한 내용은 Promises를 사용하는 JavaScript의 비동기 프로그래밍을 참조하세요.

Windows 런타임 앱에서 네트워크에 대비하려면 프로젝트 Package.appxmanifest 파일에 필요한 네트워크 접근 권한 값을 설정해야 합니다. 앱이 인터넷의 원격 서비스에 클라이언트로 연결해야 하는 경우 인터넷(클라이언트) 접근 권한 값이 필요합니다. 앱이 홈 네트워크 또는 회사 네트워크의 원격 서비스에 클라이언트로 연결해야 하는 경우 홈/회사 네트워킹 접근 권한 값이 필요합니다. 자세한 내용은 네트워크 접근 권한 값을 설정하는 방법을 참조하세요.

지침

1. 서비스 문서

예제 코드를 검토하기 전에 서비스 문서를 사용하여 웹 서비스에 대한 피드 콘텐츠의 구조를 정의하는 방법을 기본적으로 이해하면 도움이 됩니다.

서비스 문서는 하나 이상의 컬렉션을 나타내는 작업 영역 요소를 하나 이상 캡슐화합니다. 즉, 개인 블로그 및 웹 페이지와 같은 웹 게시물은 작업 영역으로 간주되며 포함된 컬렉션은 개별 피드를 나타내고 각 피드에는 많은 항목이 포함되어 있습니다.

다음 구문은 서비스 문서의 간단한 예입니다.

<?xml version="1.0" encoding='utf-8'?>
<service xmlns="http://www.w3.org/2007/app"
         xmlns:atom="http://www.w3.org/2005/Atom">
    <workspace>
        <atom:title>Main Site</atom:title>
        <collection
            href="http://example.org/blog/main" >
            <atom:title>My Blog Entries</atom:title>
            <categories
               href="http://example.com/cats/forMain.cats" />
        </collection>
        <collection
            href="http://example.org/blog/pic" >
            <atom:title>Pictures</atom:title>
            <accept>image/png</accept>
            <accept>image/jpeg</accept>
            <accept>image/gif</accept>
        </collection>
    </workspace>
</service>

서비스 문서를 검색하려면 연결된 UriretrieveServiceDocumentAsync로 전달합니다. 특정 피드 항목을 검색, 편집 또는 삭제하기 위해 앱은 검색한 ServiceDocument를 개별 항목과 연결된 절대 URI에 대해 구문 분석해야 합니다.

2. 인증 자격 증명을 사용하여 클라이언트 초기화

다음 예제에서는 Windows.Web.AtomPub 네임스페이스의 클래스를 피드 관리 작업에 사용하고 Windows.Web.Syndication 네임스페이스의 클래스를 사용하여 개별 피드 요소를 나타냅니다. 또한 대부분의 웹 게시 서비스에는 Windows.Security 네임스페이스에서 제공하는 기능인 일부 인증 양식이 필요합니다.

다음 예제에서는 자격 증명을 설정하고 AtomPubClient 인스턴스 초기화에 이를 포함하는 방법을 보여 줍니다.


//define some variables

// The default values for the site.
var baseUri = "http://<Your Wordpress Site>.wordpress.com/";
var user = "";
var password = "";

// The default Service Document and Edit 'URIs'
var editUri = "./wp-app.php/posts";
var serviceDocUri = "./wp-app.php/service";
var feedUri = "./?feed=atom";
var currentFeed = null;
var currentItemIndex = 0;
        
var client;

var item;

// Get current credentialS and create the AtomPub client
function createClient() {
    client = new Windows.Web.AtomPub.AtomPubClient();
    // Don't save the results to the client's cache
    client.bypassCacheOnRetrieve = true;

    if ((user !== "") && (password !== "")) {
        var credential = new Windows.Security.Credentials.PasswordCredential();
        credential.userName = user;
        credential.password = password;
        client.serverCredential = credential;
    }
    else {
        client.serverCredential = null;
    }
}

3. 컬렉션 내에 새 게시물 만들기

SyndicationItem 개체를 만든 다음 원하는 콘텐츠로 채워 기존 컬렉션에 새 게시물을 추가할 수 있습니다. SyndicationItem이 준비되면 개체, 항목을 설명하는 짧은 문자열 및 피드 UriAtomPubClientcreateResourceAsync 메서드로 전달합니다.

생성자에 전달된 uriString이 유효한 URI가 아니면 Uri 생성자에서 예외가 발생합니다. 따라서 try/catch 블록을 사용하여 uriString의 유효성을 검사합니다.

따라서 대부분의 비동기 네트워크 메서드를 호출할 때 예외를 처리하는 코드를 작성해야 합니다. 예외 처리기는 예외의 원인에 대해 보다 자세한 정보를 검색하므로 오류를 더 잘 이해하고 적절한 의사 결정을 내릴 수 있습니다. 자세한 내용은 네트워크 앱에서 예외를 처리하는 방법을 참조하세요.

HTTP 서버에 연결할 수 없거나 Uri 개체가 유효한 AtomPub 또는 RSS 피드를 가리키지 않는 경우 createResourceAsync 메서드에서 예외가 발생합니다. 샘플 코드는 onError 함수를 사용하여 예외를 catch하고, 오류가 발생할 경우 예외에 대한 자세한 정보를 출력합니다.

// Called when an async function generates an error.
function onError(err) {
    displayError(err);

    // Match error number with a WebErrorStatus value, in order to deal
    // with a specific error.
    var errorStatus = Windows.Web.WebError.getStatus(err.number);
    if (errorStatus === Windows.Web.WebErrorStatus.unauthorized) {
        displayLog("Wrong username or password!");
    }
}

function createPost (uriString, postTitle, postContent, postSummary, postAuthor) {

    var resourceUri;
    try {
        resourceUri = new Windows.Foundation.Uri(uriString);
    } catch (error) {
        displayLog("Error: Invalid URI");
    return;

    var syndicationItem;

    item = new Windows.Web.Syndication.SyndicationItem();
    item.title = new Windows.Web.Syndication.SyndicationText(postTitle);
    item.summary = new Windows.Web.Syndication.SyndicationText(postSummary);
    item.content = new Windows.Web.Syndication.SyndicationContent(postContent, Windows.Web.Syndication.SyndicationTextType.Text);
    item.authors[0] = new Windows.Web.Syndication.SyndicationPerson(postAuthor);
    // Note: Also other item fields can be set such as 'syndicationItem.Categories[0]'

    return client.createResourceAsync(resourceUri, item.title.text, item);
}).done(function (result) {
    if (result) {
        displayLog("Posted at " + result.editUri.displayUri);
        displayLog("New post created.");
    }
 }, onError);

4. 컬렉션 내에 있는 게시물 편집

컬렉션에 있는 기존 항목을 편집하려면 연결된 UriSyndicationClientretrieveFeedAsync 메서드로 전달합니다. SyndicationItem을 새 값으로 준비한 다음 항목을 검색하는 데 사용된 Uri와 함께 개체를 AtomPubClientupdateResourceAsync로 전달합니다.

function editPost (uriString, postTitle, postContent, postSummary, postAuthor) {

    var resourceUri;
    try {
        resourceUri = new Windows.Foundation.Uri(uriString);
    } catch (error) {
        displayLog("Error: Invalid URI");
    return;

    var updatedItem = new Windows.Web.Syndication.SyndicationItem();
    updatedItem.title = new Windows.Web.Syndication.SyndicationText(postTitle);
    updatedItem.summary = new Windows.Web.Syndication.SyndicationText(postSummary);
    updatedItem.content = new Windows.Web.Syndication.SyndicationContent(postContent, Windows.Web.Syndication.SyndicationTextType.Text);
    updatedItem.authors[0] = new Windows.Web.Syndication.SyndicationPerson(postAuthor);
    // Note: Also other item fields can be set such as 'syndicationItem.Categories[0]'

    client.updateResourceAsync(resourceUri, updatedItem).done(function () {
        displayLog("Updating item completed.");
    }
 }, onError);
}

5. 컬렉션에서 게시물 삭제

컬렉션에서 항목을 삭제하려면 SyndicationItem 인스턴스의 editUri 속성을 AtomPubClient 인스턴스의 deleteResourceItemAsync 메서드에 전달합니다.

function deletePost(uriString, currentFeed) {

    var resourceUri;
    try {
        resourceUri = new Windows.Foundation.Uri(uriString);
    } catch (error) {
        displayLog("Error: Invalid URI");
    return;

   // If we retrieve the feed via the resourceUri then we will be logged in and will be
   // able to modify/delete the resource.

   client.retrieveFeedAsync(resourceUri).done(function (feed) {
       currentFeed = feed;
       currentItemIndex = 0;

       displayLog("Got feed");
       var title = "(no title)";
       if (currentFeed.title) {
           title = currentFeed.title.text;
       }
       displayLog("Title: " + title);

       var currentItem = getCurrentItem();
       if (currentItem) {
           displayLog("EditUri: " + currentItem.editUri);
       }

       displayStatus("Fetching feed completed.");
   }, onError);
    
   client.deleteResourceItemAsync(currentItem).done(function() {
       displayLog("Deleting item completed.");
    
       // Our feed is now out of date.  Re-fetch the feed before deleting something else.
       currentFeed = null;
    }, onError);
    }

요약 및 다음 단계

이 항목에서는 서비스 문서를 검색하고, 새 컬렉션 항목을 추가하고, 기존 컬렉션 항목을 수정하고, 해당 문서 내에서 컬렉션 항목을 삭제했습니다. 기본 피드 검색에 대한 간단한 설명을 보려면 웹 피드에 액세스하는 방법을 참조하세요.

관련 항목

기타

promises를 사용한 JavaScript의 비동기 프로그래밍

네트워크 접근 권한 값을 설정하는 방법

네트워크 앱에서 예외를 처리하는 방법

웹 피드에 액세스하는 방법

JavaScript로 작성한 Windows 런타임 앱용 로드맵

참조

AtomPubClient

SyndicationItem

Windows.Web.AtomPub

Windows.Web.Syndication

샘플

AtomPub 샘플

신디케이션 샘플