Session Catalog for Oracle OpenWorld & CodeOne 2018 in JSON files

0

The Oracle OpenWorld and CodeOne 2018 conferences took place in the last week of October 2018. Together, over 1500 sessions took place. The session catalog with details for all sessions is accessible at https://events.rainfocus.com/widget/oracle/oow18/catalogcodeone18 – at least at the time of writing. The session information includes title and abstract, track, session type, names of speakers, download link for the slides and more.

image

 

The data in the session catalog represents an interesting data set that could easily be used for data visualization, machine learning, business analytics and demos of web & mobile & chat application. Therefore, it could be convenient to have easy access to the data set in the session catalog.

By inspecting the HTTP calls made from the Session Catalog Web Application, it is easy to learn how the session data can be retrieved from the REST API that exposes it.

SNAGHTML1804b7d6

With a fairly simple Node application, HTTP requests can be made to retrieve all session data per session type and per batch of 50 sessions – see https://github.com/lucasjellema/Oracle-OpenWorld-CodeOne-2018-SessionCatalog/blob/master/produce-oow-catalog.js. Note how function delay(t) is used to schedule a function call.

Executing this Node program for all session types results in JSON files with session details for session type. The data in these JSON files looks like this in an online JSON viewer:

image

This data can be used for various applications and demonstrations.

A more useful file can be compiled – a file that contains all sessions and for all sessions only relevant details (and for example not all internal identifiers). This file is oow2018-sessions-catalog.json . It has been created by the Node program  compile-oow-catalog-files.js. This program leverages the JSONata language for retrieving data from complex JSON documents as well as transforming JSON documents into target documents with a different structure. JSONata is comparable in function to XPath and XSLT or XQuery. The npm module JSONata was used in this case and proved very useful.

var catalog = []
// here follows the JSONata expression - equivalent to the XSLT template or XQuery mapping
var expression = jsonata(
    ` $.{
        'code': code
        ,'title': title
        ,'abstract': abstract
        ,'duration': length
        ,'event': eventName
        ,'type': type
        ,'waitlistPeak' : waitlistLimit
        ,'speakers': participants.{'name':(firstName & ' ' & lastName)
                                  , 'company': companyName
                                  , 'jobTitle': jobTitle
                                  , 'biography' : bio
                                  , 'photoURL' : photoURL
                                  , "twitter": attributevalues[attribute_id='twitter'].value
                                  , "designations": attributevalues[attribute_id='specialdesignations'].value
                                  }
        , 'slots' : times.{ 'room': room
                          , 'date': date
                          , 'time': time   
                          , 'roomCapacity' :capacity                  
                          }                             
        , 'levels' :  attributevalues[attribute_id='SessionsbyExperienceLevel'].value
        , 'roles' :  attributevalues[attribute_id='SessionsbyYourRole'].value
        , 'track' :  attributevalues[attribute_id='Track'].value                  
        , 'slidesToDownload' : files. 
                               { "name": filename
                               ,'url':url
                               }
    }
    `);

for (sessionType of sessionTypes) {
    var file = oow2018Filename + sessionType + ".json"
    if (fs.existsSync(file)) {
        console.log("Processing " + sessionType)
        var buf = fs.readFileSync(oow2018Filename + sessionType + ".json");
        var sessions = JSON.parse(buf)

        var result = expression.evaluate(sessions);
        catalog = catalog.concat(result)
    }//if
}//for
fs.writeFileSync(oow2018Filename + '.json', JSON.stringify(catalog, null, '\t'));

 

Resources

GitHub repo with the Node source code as well as the JSON files created for the session catalog data: https://github.com/lucasjellema/Oracle-OpenWorld-CodeOne-2018-SessionCatalog

Online JSON Inspector: http://jsonviewer.stack.hu/

Earlier article on retrieving Session Catalog for Oracle OpenWorld and JavaOne 2017: https://technology.amis.nl/2017/08/10/when-screen-scraping-became-api-calling-gathering-oracle-openworld-2017-session-catalog-with-node/

JSONata – home page: http://jsonata.org/

JSONata – in browser try out page – http://try.jsonata.org/

About Author

Lucas Jellema, active in IT (and with Oracle) since 1994. Oracle ACE Director and Oracle Developer Champion. Solution architect and developer on diverse areas including SQL, JavaScript, Kubernetes & Docker, Machine Learning, Java, SOA and microservices, events in various shapes and forms and many other things. Author of the Oracle Press book Oracle SOA Suite 12c Handbook. Frequent presenter on user groups and community events and conferences such as JavaOne, Oracle Code, CodeOne, NLJUG JFall and Oracle OpenWorld.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.