У меня есть azure функции с http-триггером, которые получают данные из внешнего источника. внутри функций я создал файл RSS с этими внешними данными.
Я хочу обновить этот файл при получении новых данных (в этом состоянии он удаляет предыдущие данные).
Кроме того, я хочу знать, как я могу получить URL этого файла RSS для использования в приложении logi c.
любая идея будет одобрена. Класс функций выглядит следующим образом:
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();
}
}
**** Update **** класс 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);
}
}