gpt4 book ai didi

java - 如何在azure函数中使用rss文件

转载 作者:行者123 更新时间:2023-12-01 17:39:42 25 4
gpt4 key购买 nike

我有带有http触发器的azure函数,可以从外部源获取数据。在函数内部,我使用这些外部数据创建了 RSS 文件。

我想在收到新数据时更新此文件(在这种状态下它会删除以前的数据)。

此外,我想知道如何获取此 RSS 文件的 url,以便在逻辑应用程序中使用它。

任何想法都会被采纳。

Function 类如下所示:

public class Function {

private HashMap<String, String> crntNewItemList = new HashMap<>();

@FunctionName("HttpAddFeedItem")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");

// Parse query parameter
String body = request.getBody().get(); // Get request body

if (body == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
} else {
String contentType = request.getHeaders().get("content-type");

initNewsItemList(contentType, body);

String copyright = "Copyright hold by XXX";
String title = "Eclipse and Java Information";
String description = "Eclipse and Java Information";
String language = "en";
String link = "httXX://XXw.XXX.com/";
Calendar cal = new GregorianCalendar();
Date creationDate = cal.getTime();
SimpleDateFormat date_format = new SimpleDateFormat(
"EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US);
String pubdate = date_format.format(creationDate);
Feed rssFeeder = new Feed(title, link, description, language,
copyright, pubdate);

// now add one example entry
FeedMessage feed = new FeedMessage();
feed.setTitle(crntNewItemList.get("title"));
feed.setDescription(crntNewItemList.get("description"));
feed.setAuthor("nonsense@somewhere.de (XXX)");
feed.setGuid("htXXs://XXw.XXX.com/tutorials/RSSFeed/article.html");
feed.setLink(crntNewItemList.get("link"));
rssFeeder.getMessages().add(feed);

// now write the file
RSSFeedWriter writer = new RSSFeedWriter(rssFeeder, "articles.rss");
try {
writer.write();
} catch (Exception e) {
e.printStackTrace();
}
return request.createResponseBuilder(HttpStatus.OK).body("success").build();
}
}

****更新****
RSSFeedWriter 类是:

public class RSSFeedWriter {

private String outputFile;
private Feed rssfeed;

public RSSFeedWriter(Feed rssfeed, String outputFile) {
this.rssfeed = rssfeed;
this.outputFile = outputFile;
}

public void write() throws Exception {

// create a XMLOutputFactory
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();

// create XMLEventWriter
XMLEventWriter eventWriter = outputFactory
.createXMLEventWriter(new FileOutputStream(outputFile));

// create a EventFactory

XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEvent end = eventFactory.createDTD("\n");

// create and write Start Tag

StartDocument startDocument = eventFactory.createStartDocument();

eventWriter.add(startDocument);

// create open tag
eventWriter.add(end);

StartElement rssStart = eventFactory.createStartElement("", "", "rss");
eventWriter.add(rssStart);
eventWriter.add(eventFactory.createAttribute("version", "2.0"));
eventWriter.add(end);

eventWriter.add(eventFactory.createStartElement("", "", "channel"));
eventWriter.add(end);

// Write the different nodes

createNode(eventWriter, "title", rssfeed.getTitle());

createNode(eventWriter, "link", rssfeed.getLink());

createNode(eventWriter, "description", rssfeed.getDescription());

createNode(eventWriter, "language", rssfeed.getLanguage());

createNode(eventWriter, "copyright", rssfeed.getCopyright());

createNode(eventWriter, "pubdate", rssfeed.getPubDate());

for (FeedMessage entry : rssfeed.getMessages()) {
eventWriter.add(eventFactory.createStartElement("", "", "item"));
eventWriter.add(end);
createNode(eventWriter, "title", entry.getTitle());
createNode(eventWriter, "description", entry.getDescription());
createNode(eventWriter, "link", entry.getLink());
createNode(eventWriter, "author", entry.getAuthor());
createNode(eventWriter, "guid", entry.getGuid());
eventWriter.add(end);
eventWriter.add(eventFactory.createEndElement("", "", "item"));
eventWriter.add(end);

}

eventWriter.add(end);
eventWriter.add(eventFactory.createEndElement("", "", "channel"));
eventWriter.add(end);
eventWriter.add(eventFactory.createEndElement("", "", "rss"));

eventWriter.add(end);

eventWriter.add(eventFactory.createEndDocument());

eventWriter.close();
}

private void createNode(XMLEventWriter eventWriter, String name,

String value) throws XMLStreamException {
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEvent end = eventFactory.createDTD("\n");
XMLEvent tab = eventFactory.createDTD("\t");
// create Start node
StartElement sElement = eventFactory.createStartElement("", "", name);
eventWriter.add(tab);
eventWriter.add(sElement);
// create Content
Characters characters = eventFactory.createCharacters(value);
eventWriter.add(characters);
// create End node
EndElement eElement = eventFactory.createEndElement("", "", name);
eventWriter.add(eElement);
eventWriter.add(end);
}
}

最佳答案

关于这个问题,我建议您创建rss文件并将该文件上传到Azure blob。在Azure逻辑应用中,我们可以使用Azure Blob Storage Connector处理 rss 文件。

更多详情,请引用以下步骤

  1. 安装 Azure Blob 存储 SDK
 <dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage</artifactId>
<version>8.4.0</version>
</dependency>
  • 更新 RSSFeedWriter 类
  • public class RSSFeedWriter {
    private String outputFile; // the file name
    private Feed rssfeed;
    private String connectionString; // the storage account connection string

    public RSSFeedWriter(Feed rssfeed, String outputFile) {
    this.rssfeed = rssfeed;
    this.outputFile = outputFile;
    }
    public RSSFeedWriter(Feed rssfeed, String outputFile,String connectionString) {
    this.rssfeed = rssfeed;
    this.outputFile = outputFile;
    this.connectionString=connectionString;
    }
    public void write() throws Exception {

    CloudStorageAccount storageAccount = CloudStorageAccount.parse(connectionString);
    CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
    CloudBlobContainer container = blobClient.getContainerReference("test");
    CloudBlockBlob blob =container.getBlockBlobReference("test.rss");
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    // create a XMLOutputFactory
    XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();

    // create XMLEventWriter
    XMLEventWriter eventWriter = outputFactory
    .createXMLEventWriter(outputStream);
    // create rss
    ...

    // upload rss to Azure blob
    blob.upload(new ByteArrayInputStream(outputStream.toByteArray()),outputStream.toByteArray().length);
    outputStream.close();
    }

    private void createNode(XMLEventWriter eventWriter, String name,

    String value) throws XMLStreamException {
    XMLEventFactory eventFactory = XMLEventFactory.newInstance();
    XMLEvent end = eventFactory.createDTD("\n");
    XMLEvent tab = eventFactory.createDTD("\t");
    // create Start node
    StartElement sElement = eventFactory.createStartElement("", "", name);
    eventWriter.add(tab);
    eventWriter.add(sElement);
    // create Content
    Characters characters = eventFactory.createCharacters(value);
    eventWriter.add(characters);
    // create End node
    EndElement eElement = eventFactory.createEndElement("", "", name);
    eventWriter.add(eElement);
    eventWriter.add(end);
    }

    }
  • 更新功能代码
  • @FunctionName("HttpAddFeedItem")
    public HttpResponseMessage run(
    @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
    final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    ...

    // get the storage account connection string you store in app settings or local.settings.json with the key name
    String connectionString = System.getenv("AzureWebJobsStorage");
    String outputFile=""; // the file name
    RSSFeedWriter writer = new RSSFeedWriter(rssFeeder, outputFile,connectionString);
    try {
    writer.write();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return request.createResponseBuilder(HttpStatus.OK).body("success").build();
    }
    }
    <小时/>

    更新

    如果您想在浏览器中通过blob URL直接访问rss文件,请引用以下步骤

    1. 请将容器公共(public)访问级别设置为仅限 blob 的公共(public)读取访问权限。更多详情请引用document

    2. 请确保 blob 的内容类型正确。 rss 文件的内容类型可以是 application/rss+xml 。关于如何更改内容类型,请引用以下代码

     CloudStorageAccount storageAccount = CloudStorageAccount.parse(Constr)
    CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
    CloudBlobContainer container = blobClient.getContainerReference("test");
    if(!container.exists()){
    container.create();

    }
    CloudBlockBlob blob =container.getBlockBlobReference("test.rss");
    blob.getProperties().setContentType("application/rss+xml");

    blob.uploadProperties();

    之后我们就可以访问 file在浏览器中 enter image description here enter image description here

    关于java - 如何在azure函数中使用rss文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60976424/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com