![]() |
![]() |
---|
Overview |
---|
The available OpenData web services allow the querying of course catalog and course section, map locations, news, events, transit information, and directory information via REST based web services. All web services return data in JSON format.
Services are called as REST formatted URLs with any additional desired parameters placed in the URL in name value pairs:
|
Security |
---|
Security credentials can be obtained through the following link:
https://provider.www.upenn.edu/computing/da/secure/webloginportal/eforms/
Security credentials will be sent to you via SecureShare when the form is submitted. Credentials consist of an application id and a credential string.
These values must be placed in name value pairs in the http header of any requests per the following example:
"Authorization-Bearer", "UPENN_OD_emjT_1002233"
"Authorization-Token", "2bbk83v7fasdth34j5asas" Content type should be posted as follows: "Content-Type", "application/json; charset=utf-8" Requests can be POST or GET; as there is no update on the server side for these services, POST and GET filter to the same handler. Query usage is currently constrained to 6000 calls per hour per client id - you will receive an errror if you exceed this maximum. Note that one account is required for each of the following service groups: Maps & Events & News API, Transit API, Registrar's API, Dining service, and Directory API. |
Paging |
---|
Paging parameters can be appended to the course section search and the course search queries.
Paging can be used to control how many objects appear in each result and to page through those objects with additional service calls.
Paging information will be included in the service_meta result object for each call.
Sample call with paging parameters:
|
Service meta |
---|
The service_meta information included with the results of each service query contains information regarding the current paging numbers and any error information.
Sample service_meta object:
"service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 1, "number_of_pages" : 1, "previous_page_number" : 1, "results_per_page" : 20 } |
Course catalog search service |
---|
This service allows the search of the course catalog using subjects and course numbers. It does not return section level information.
Sample usages:
{ "result_data" : [ { "activities_and_credits" : [ { "activity_code" : "LEC", "credit" : "1" }, { "activity_code" : "REC", "credit" : "0" } ], "corequisites" : "", "course_credit_connector" : "F", "course_credit_type" : "CU", "course_description" : "This course is an introduction to the basic concepts and standards underlying financial accounting systems. Several important concepts will be studied in detail, including: revenue recognition, inventory, long-lived assets, present value, and long term liabilities. The course emphasizes the construction of the basic financial accounting statements - the income statement, balance sheet, and cash flow statement - as well as their interpretation.", "course_id" : "ACCT101", "course_level" : "", "course_level_description" : "", "course_notes" : "", "course_number" : "101", "course_title" : "Principles of Accounting I", "crosslistings" : [ ], "department" : "ACCT", "department_of_record" : "ACCT", "distribution_requirement" : "", "eas_credit_factor_code" : "", "instructors" : "", "prerequisites" : "", "register_subgroup_one" : "", "register_subgroup_two" : "", "requirements_met" : [ ], "scheduling_priority" : "U", "school_code" : "WH", "terms_offered_code" : "C", "terms_offered_description" : "One-term course offered either term" } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 1, "number_of_pages" : 1, "previous_page_number" : 1, "results_per_page" : 20 } } |
Course section search service |
---|
This service is a wrapper for the PennInTouch course search service.
All parameters available to search on within PennInTouch are available in this wrapper with the exception of student specific search parameters,
such as "only find courses that fit in my current schedule". Acceptable URL parameters for in-depth searches can be retrieved from the
Course section search parameters service. The course section search will generally
return only results within the current term. At times, there may be more than one term open. when this is the case, the map "available_terms_map"
in the service Course section search parameters service will contain multiple terms and term
may be passed as a parameter to the service.
Sample usages:
{ "result_data" : [ { "activity" : "LEC", "activity_description" : "Lecture", "third_party_links" : "", "corequisite_activity" : "", "corequisite_activity_description" : "", "course_department" : "ACCT", "course_description" : "This course is an introduction to the basic concepts and standards underlying financial accounting systems. Several important concepts will be studied in detail, including: revenue recognition, inventory, long-lived assets, present value, and long term liabilities. The course emphasizes the construction of the basic financial accounting statements - the income statement, balance sheet, and cash flow statement - as well as their interpretation.", "course_description_url" : "", "course_meeting_message" : "", "course_notes" : "", "course_notes_message" : "", "course_number" : "101", "course_status" : "C", "course_status_normalized" : "Closed", "course_status_reason_code" : "", "course_terms_offered" : "One-term course offered either term", "course_title" : "Principles of Accounting I", "credit_and_grade_type" : "1 CU", "credit_connector" : "F", "credit_type" : "CU", "credits" : "1 CU", "crosslist_primary" : "", "crosslistings" : [ ], "department_description" : "Accounting", "department_url" : "http://accounting.wharton.upenn.edu", "end_date" : "2013-12-10T05:00:00Z", "first_meeting_days" : "MW10:30 AM", "fulfills_college_requirements" : [ ], "grade_type" : "", "important_notes" : [ "Registration also required for Recitation (see below)" ], "instructors" : [ { "name" : "Jennifer L.M. Altamuro", "section_id" : "ACCT101001", "term" : "2013C" } ], "is_cancelled" : false, "is_closed" : true, "is_crosslist_primary" : false, "is_not_scheduled" : false, "is_special_session" : false, "labs" : [ ], "lectures" : [ ], "max_enrollment" : "100", "max_enrollment_crosslist" : "100", "maximum_credit" : "1", "meetings" : [ { "building_code" : "", "building_name" : "", "end_hour_24" : 12, "end_minutes" : 0, "end_time" : "12:00 PM", "end_time_24" : 12.0, "meeting_days" : "MW", "room_number" : "", "section_id" : "ACCT101001", "section_id_normalized" : "ACCT-101-001", "start_hour_24" : 10, "start_minutes" : 30, "start_time" : "10:30 AM", "start_time_24" : 10.3, "term" : "2013C" } ], "minimum_credit" : "1", "prerequisite_notes" : [ ], "primary_instructor" : "", "recitations" : [ { "course_id" : "101", "section_id" : "201", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "202", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "203", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "204", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "205", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "206", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "207", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "208", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "209", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "210", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "211", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "212", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "213", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "214", "subject" : "ACCT" }, { "course_id" : "101", "section_id" : "215", "subject" : "ACCT" } ], "requirements" : [ { "argument" : "", "registration_control_code" : "CA", "requirement_description" : "Section Activity Co-Requisite Required", "section_id" : "ACCT101001", "term" : "2013C", "value" : "REC", "value_normalized" : "Recitation" } ], "requirements_title" : "Associated recitations", "section_id" : "ACCT101001", "section_id_normalized" : "ACCT-101-001", "section_number" : "001", "section_title" : "Principles of Accounting", "start_date" : "2013-08-28T04:00:00Z", "syllabus_url" : "http://syllabi.wharton.upenn.edu", "term" : "2013C", "term_normalized" : "Fall 2013", "term_session" : "" } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 1, "number_of_pages" : 1, "previous_page_number" : 1, "results_per_page" : 20 } } |
Course status service |
---|
This service returns the status of one or many courses; O for open, C for closed, X for cancelled. Paging does NOT apply to this service through the metadata is included.
Sample usages:
{ "result_data" : [ { "course_section" : "ANTH361401", "previous_status" : "", "status" : "O", "status_code_normalized" : "Open", "term" : "2019A" } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 1, "previous_page_number" : 0, "results_per_page" : 0 } }Sample result with all records: { "result_data" : [ { "course_section" : "AAMW640401", "previous_status" : "", "status" : "O", "status_code_normalized" : "Open", "term" : "2019A" }, { "course_section" : "WRIT130602", "previous_status" : "", "status" : "C", "status_code_normalized" : "Closed", "term" : "2019A" }, { "course_section" : "WRIT130603", "previous_status" : "", "status" : "O", "status_code_normalized" : "Open", "term" : "2019A" }, ETC, ETC, ETC], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 1, "previous_page_number" : 0, "results_per_page" : 0 } } |
Course status webhook |
---|
This service dynamically sends the status of changed or newly added courses to a webhook upon change or addition; O for open, C for closed, X for cancelled. In order to utilize this service you must secure a Registrar's API credential as described at the top of this document,
but you must take additional steps to contact opendata-help@lists.upenn.edu to set up the web hook. The following items will be required:
{ "course_section" : "REAL891751", "previous_status" : "X", "status" : "O", "status_code_normalized" : "Open", "term" : "2019A" } |
Course section search parameters service |
---|
This service, which takes no parameters, allows user to programmatically access acceptable parameters that can be passed to the Course section search service.
This service allows programmers to build the same pulldowns and entry fields that exist on the PennInTouch course search by
providing them with a list of maps and descriptions. Note that parameters that are fed by map MUST have one of the acceptable
map values as a value or an error will be returned.
For this service, result_data contains a map of acceptable parameters to pass, labeled "acceptable_search_url_parameters_map".
If the possible values for the parameter are constrained to a map of values, that is indicated in the text, for instance: "starts_at_or_after_hour"
: "Use one of the values from the map starts_at_or_after_hour_map". Ergo, when passing ?starts_at_or_after_hour=VALUE in the URL, VALUE
must be one of the acceptable values in the included map “starts_at_or_after_hour_map”.
Sample usage:
{ "result_data" : [ { "acceptable_search_url_parameters_map" : { "course_id" : "Enter any portion: acct, acct-101, acct-101-001", "description" : "Enter any word to search for in the course description or title", "instructor" : "enter all or part of an instructor's last name", "starts_at_or_after_hour" : "Use one of the values from the map starts_at_or_after_hour_map", "ends_at_or_after_hour" : "Use one of the values from the map ends_at_or_after_hour_map", "course_level_at_or_above" : "Use one of the values from the map course_level_at_or_above_map", "course_level_at_or_below" : "Use one of the values from the map course_level_at_or_below_map", "fulfills_requiremement" : "Use one of the values from the map fulfills_requiremement_map", "activity" : "Use one of the values from the map activity_map", "starts_on_day" : "Use one of the values from the map starts_on_day_map", "program" : "Use one of the values from the map program_map", "term" : "use one of the values from the map available_terms_map", "open" : "Whether the course is open - use true or false", "closed" : "Whether the course is closed - use true or false", "cancelled" : "Whether the course has been cancelled - use true or false", "all_statuses" : "Whether to search for all statuses - use true" }, "activity_map" : { "LEC" : "Lecture", "REC" : "Recitation", "LAB" : "Laboratory", "IND" : "Independent Study", "SEM" : "Seminar", "SRT" : "Senior Thesis", "STU" : "Studio", "CLN" : "Clinic", "PRC" : "SCUE Preceptorial", "PRO" : "NSO Proseminar" }, "available_terms_map" : { "2013B" : "Summer 2013", "2013C" : "Fall 2013" }, "course_level_at_or_above_map" : { "100" : "100", "200" : "200", "300" : "300", "400" : "400", "500" : "500", "600" : "600", "700" : "700", "800" : "800" }, "course_level_at_or_below_map" : { "100" : "100", "200" : "200", "300" : "300", "400" : "400", "500" : "500", "600" : "600", "700" : "700", "800" : "800" }, "departments_map" : { "AAMW" : "Art & Arch of Med. World", "ACCT" : "Accounting", "AFRC" : "Africana Studies", "AFST" : "African Studies Program", "ALAN" : "Asian Languages", "AMCS" : "Applied Math & Computatnl Sci.", "ANAT" : "Anatomy", "ANCH" : "Ancient History", "ANEL" : "Ancient Near East Languages", "ANTH" : "Anthropology", "ARAB" : "Arabic", "ARCH" : "Architecture", "ARTH" : "Art History", "ASAM" : "Asian American Studies", "ASTR" : "Astronomy", "BCHE" : "Biochemistry (Undergrads)", "BE" : "Bioengineering", "BENG" : "Bengali", "BEPP" : "Business Econ & Public Policy", "BFMD" : "Benjamin Franklin Seminars-Med", "BIBB" : "Biological Basis of Behavior", "BIOE" : "Bioethics", "BIOL" : "Biology", "BIOM" : "Biomedical Studies", "BMB" : "Biochemistry & Molecular Biophy", "BSTA" : "Biostatistics", "CAMB" : "Cell and Molecular Biology", "CBE" : "Chemical & Biomolecular Engr", "CHEM" : "Chemistry", "CHIN" : "Chinese", "CINE" : "Cinema Studies", "CIS" : "Computer and Information Sci", "CIT" : "Computer and Information Tech", "CLST" : "Classical Studies", "COGS" : "Cognitive Science", "COLL" : "College", "COML" : "Comparative Literature", "COMM" : "Communications", "CPLN" : "City Planning", "CRIM" : "Criminology", "DEMG" : "Demography", "DORT" : "Orthodontics", "DOSP" : "Oral Surgery and Pharmacology", "DPED" : "Pediatric Dentistry", "DRST" : "Restorative Dentistry", "DTCH" : "Dutch", "DYNM" : "Organizational Dynamics", "EALC" : "East Asian Languages & Civilztn", "EAS" : "Engineering & Applied Science", "ECON" : "Economics", "EDUC" : "Education", "EEUR" : "East European", "ENGL" : "English", "ENGR" : "Engineering", "ENM" : "Engineering Mathematics", "ENVS" : "Environmental Studies", "EPID" : "Epidemiology", "ESE" : "Electric & Systems Engineering", "FNAR" : "Fine Arts", "FNCE" : "Finance", "FOLK" : "Folklore", "FREN" : "French", "FRSM" : "Non-Sas Freshman Seminar", "GAFL" : "Government Administration", "GAS" : "Graduate Arts & Sciences", "GCB" : "Genomics & Comp. Biology", "GEOL" : "Geology", "GREK" : "Greek", "GRMN" : "Germanic Languages", "GSWS" : "Gender,Sexuality & Women's Stud", "GUJR" : "Gujarati", "HCMG" : "Health Care Management", "HEBR" : "Hebrew", "HIND" : "Hindi", "HIST" : "History", "HPR" : "Health Policy Research", "HSOC" : "Health & Societies", "HSPV" : "Historic Preservation", "HSSC" : "History & Sociology of Science", "IMUN" : "Immunology", "INTG" : "Integrated Studies", "INTL" : "International Programs", "INTR" : "International Relations", "IPD" : "Integrated Product Design", "ITAL" : "Italian", "JPAN" : "Japanese", "JWST" : "Jewish Studies Program", "KORN" : "Korean", "LALS" : "Latin American & Latino Studies", "LARP" : "Landscape Arch & Regional Plan", "LATN" : "Latin", "LAW" : "Law", "LGIC" : "Logic, Information and Comp.", "LGST" : "Legal Studies & Business Ethics", "LING" : "Linguistics", "LSMP" : "Life Sciences Management Prog", "MAPP" : "Master of Applied Positive Psyc", "MATH" : "Mathematics", "MEAM" : "Mech Engr and Applied Mech", "MED" : "Medical", "MGEC" : "Management of Economics", "MGMT" : "Management", "MKTG" : "Marketing", "MLA" : "Master of Liberal Arts Program", "MLYM" : "Malayalam", "MMP" : "Master of Medical Physics", "MSCI" : "Military Science", "MSE" : "Materials Science and Engineer", "MSSP" : "Social Policy", "MTR" : "Mstr Sci Transltl Research", "MUSA" : "Master of Urban Spatial Analyt", "MUSC" : "Music", "NANO" : "Nanotechnology", "NELC" : "Near Eastern Languages & Civlzt", "NETS" : "Networked and Social Systems", "NGG" : "Neuroscience", "NPLD" : "Nonprofit Leadership", "NSCI" : "Naval Science", "NURS" : "Nursing", "OPIM" : "Operations and Information Mgmt", "PERS" : "Persian", "PHIL" : "Philosophy", "PHRM" : "Pharmacology", "PHYS" : "Physics", "PPE" : "Philosophy, Politics, Economics", "PRTG" : "Portuguese", "PSCI" : "Political Science", "PSYC" : "Psychology", "PUBH" : "Public Health Studies", "PUNJ" : "Punjabi", "REAL" : "Real Estate", "RELS" : "Religious Studies", "ROML" : "Romance Languages", "RUSS" : "Russian", "SAST" : "South Asia Studies", "SCND" : "Scandinavian", "SKRT" : "Sanskrit", "SLAV" : "Slavic", "SOCI" : "Sociology", "SPAN" : "Spanish", "STAT" : "Statistics", "STSC" : "Science, Technology & Society", "SWRK" : "Social Work", "TAML" : "Tamil", "TCOM" : "Telecommunications & Networking", "TELU" : "Telugu", "THAR" : "Theatre Arts", "TURK" : "Turkish", "URBS" : "Urban Studies", "URDU" : "Urdu", "VCSN" : "Clinical Studies - Nbc Elect", "VCSP" : "Clinical Studies - Phila Elect", "VIPR" : "Viper", "VISR" : "Vet School Ind Study & Research", "VLST" : "Visual Studies", "VMED" : "Csp/Csn Medicine Courses", "WH" : "Wharton Undergraduate", "WHCP" : "Wharton Communication Pgm", "WHG" : "Wharton Graduate", "WRIT" : "Writing Program", "YDSH" : "Yiddish" }, "ends_at_or_after_hour_map" : { "07:00" : "7:00 AM", "07:30" : "7:30 AM", "08:00" : "8:00 AM", "08:30" : "8:30 AM", "09:00" : "9:00 AM", "09:30" : "9:30 AM", "10:00" : "10:00 AM", "10:30" : "10:30 AM", "11:00" : "11:00 AM", "11:30" : "11:30 AM", "12:00" : "12:00 PM", "12:30" : "12:30 PM", "13:00" : "1:00 PM", "13:30" : "1:30 PM", "14:00" : "2:00 PM", "14:30" : "2:30 PM", "15:00" : "3:00 PM", "15:30" : "3:30 PM", "16:00" : "4:00 PM", "16:30" : "4:30 PM", "17:00" : "5:00 PM", "17:30" : "5:30 PM", "18:00" : "6:00 PM", "18:30" : "6:30 PM", "19:00" : "7:00 PM", "19:30" : "7:30 PM", "20:00" : "8:00 PM", "20:30" : "8:30 PM", "21:00" : "9:00 PM", "21:30" : "9:30 PM", "22:00" : "10:00 PM", "22:30" : "10:30 PM" }, "fulfills_requiremement_map" : { "MDS" : "Society Sector", "MDH" : "History & Tradition Sector", "MDA" : "Arts & Letters Sector", "MDO,MDB" : "Humanities & Social Science Sector", "MDL" : "Living World Sector", "MDP" : "Physical World Sector", "MDN,MDB" : "Natural Science & Math Sector", "MWC" : "Writing Requirement", "MQS" : "College Quantitative Data Analysis Req.", "MFR" : "Formal Reasoning Course", "MC1" : "Cross Cultural Analysis", "MC2" : "Cultural Diversity in the US" }, "program_map" : { "MSL" : "Academically Based Community Service Courses", "BFS" : "Ben Franklin Seminars", "CGS" : "College of Liberal & Professional Studies", "CRS" : "Critical Writing Seminars", "FORB" : "Freshman-Friendly courses", "MFS" : "Freshman Seminars", "PLC" : "Penn Language Center", "SS" : "Summer Sessions I & II", "WPWP" : "Wharton Programs for Working Professionals" }, "starts_at_or_after_hour_map" : { "07:00" : "7:00 AM", "07:30" : "7:30 AM", "08:00" : "8:00 AM", "08:30" : "8:30 AM", "09:00" : "9:00 AM", "09:30" : "9:30 AM", "10:00" : "10:00 AM", "10:30" : "10:30 AM", "11:00" : "11:00 AM", "11:30" : "11:30 AM", "12:00" : "12:00 PM", "12:30" : "12:30 PM", "13:00" : "1:00 PM", "13:30" : "1:30 PM", "14:00" : "2:00 PM", "14:30" : "2:30 PM", "15:00" : "3:00 PM", "15:30" : "3:30 PM", "16:00" : "4:00 PM", "16:30" : "4:30 PM", "17:00" : "5:00 PM", "17:30" : "5:30 PM", "18:00" : "6:00 PM", "18:30" : "6:30 PM", "19:00" : "7:00 PM", "19:30" : "7:30 PM", "20:00" : "8:00 PM", "20:30" : "8:30 PM", "21:00" : "9:00 PM", "21:30" : "9:30 PM", "22:00" : "10:00 PM", "22:30" : "10:30 PM" }, "starts_on_day_map" : { "M" : "Monday", "T" : "Tuesday", "W" : "Wednesday", "R" : "Thursday", "F" : "Friday", "S" : "Saturday", "U" : "Sunday" } } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "last_updated" : "", "next_page_number" : 2, "number_of_pages" : -1, "previous_page_number" : 1, "results_per_page" : 30 } } |
News / events / map search service |
---|
This service allows text search on items that are searchable in the application m.upenn.edu. These items include map locations (campus items),
news articles, and events. Each one of these types of items has a different json structure but they are all returned in one list
if the search is searching more than one content type (configurable by the service). It can easily be determined which item one is dealing with
by checking the "content_type" field in the resulting json list. This field will return "news", "events", or "map". The text search is a Lucene indexed
search and will acccept and execute on particular operands such as OR, AND, quotes, etc.
In order to configure which items you would like to search, use the parameter "source" and pass any of the following items: "news", "events", "map".
At least one source declaration is required or not results will be returned. To search only news: ?source=news&description=penn To search both news and events: ?source=news&source=events&description=penn Unfortunately, some of the fields for news, events, and maps may contain HTML markup from the source. This markup will have to be stripped if so desired. Sample usages:
"result_data" : [ { "additional_text" : "", "address" : "3609 Chestnut Street", "aka" : "New Ralston House", "architect" : "", "art_type" : "", "building_code" : "7 018", "campus_item_images" : [ { "id" : 10772315, "image_url" : "http://www.facilities.upenn.edu/sites/default/files/styles /photogallery_main_640x400px/public/bi7018.jpg?itok=a4LqOcux", "thumbnail_url" : "http://www.facilities.upenn.edu/sites/default/ files/styles/thumbnail/public/bi7018.jpg?itok=0WKu9X3L", "title" : "Penn Center for Rehabilitation and Care" } ], "campus_item_type_id" : 10269392, "city" : "Philadelphia", "content_type" : "map", "description" : "Located in what was formerly called The New Ralston House, it is a mixed-use structure that serves the community geriatric needs.", "emergency_address" : "", "facilities_id" : 1052, "floors" : "0", "gross_area" : "", "http_link" : "http://www.facilities.upenn.edu/maps/locations/ penn-center-rehabilitation-and-care", "id" : 10456379, "keywords" : "7018, Penn Center for Rehabilitation and Care, Ralston House, New Ralston House, Penn Medical Center", "latitude" : "39.955002", "longitude" : "-75.194801", "pdf_link" : "", "state" : "PA", "title" : "Penn Center for Rehabilitation and Care", "year_built" : "NA", "zip_code" : "19104" },{ "author" : "Maria Zankey", "comments_url" : "", "content_categories" : [ { "description" : "", "id" : 5890819, "label" : "Penn Current", "parent_category_id" : 1108693 } ], "content_type" : "news", "description" : "<p>As Daniel Drake makes his way through the halls of the <a title=\"Living Independently For Elders (LIFE)\" href=\"http://www.lifeupenn.org/\"> Living Independently For Elders (LIFE)</a> program headquarters, almost every person he passes shakes his hand, nods “hello,” greets him by name. And despite having a jam-packed itinerary as the CEO of the all-inclusive elder care center, Drake knows their names as well.</p>\n\n<p>“We have 422 members, and I’ve gotten to know a great majority of them,” says Drake, who took the helm of the School of Nursing’s LIFE program four years ago. “I have lunch with them. And when I see them, believe me, they tell you the positives of the program.”</p>\n<p>And for the members of the program, who are able to spend time at home and avoid round-the-clock nursing home care thanks to LIFE, the positives are aplenty. Since 1998, LIFE’s innovative program has been providing all necessary preventative, primary health, acute, and long-term care and transportation during the day so that eligible senior residents of West Philadelphia can remain in their communities.</p>\n<p>“If you talk to most of the elderly people in the community, they’ll tell you they’d like to stay in their homes,” Drake says. “They have nothing against nursing homes, they don’t mind going for a short stay to rehab, but often, they like to go home and be in community-based living, and that’s our goal—to keep people at their highest functioning level in the community.”<br />For Drake, who has an MBA and a master’s degree in health science administration, and has been working in the long-term nursing care industry since 1993, that mission—and his passion for working with the elderly—were what drew him to Penn.</p>\n<p>The <em>Current</em> visited Drake at the LIFE program headquarters at 4508 Chestnut St. to talk with him about the challenges of running a unique health care system, new problems facing today’s elderly populations and their caregivers, and the joys of spending time some of the elder residents of West Philadelphia. <br /><br /><strong>Q. When you first joined the LIFE program team, what were some of your main initiatives, and how have they evolved?</strong> <br /><strong>A. </strong>A lot of them were and still are geriatric initiatives with reducing the amount of emergency room visits, reducing hospitalizations, keeping people in the community, keeping them out of the nursing home environment, that’s what most people want. <br />I always believed Penn had the best nursing school, and I believe that because of that, LIFE is the No. 1 PACE [Program of All-inclusive Care for the Elderly] program, which is the national model that helps older people remain in their homes.<br /> You can look at the LIFE program like it’s an inside-out nursing home. We provide the services someone would get in a nursing home, but in their home. They can come [to the center] Monday through Friday, and they can see their nurse practitioner, a podiatrist, a dentist, an eye doctor, the medical director, physical therapy, or just come here and socialize for the day. So they really enjoy the program.<br /><br /><strong>Q. Who is an ideal candidate to participate in the program?</strong><br /><strong>A.</strong> Everyone who is in the program has to be nursing-home eligible with a diagnosis, so we have a very frail population. In fact, we have the No. 2 highest acuity among the PACE programs, which presents its own challenges. Potential members have to be over 55 years old, live in one of our 13 zip codes—10 across West Philadelphia, North Philadelphia, Southwest Philadelphia, and three in Delaware County—and who would rather be in our program than in a nursing home so they can stay at home.<br /><br /><strong>Q. What made you want to do this kind of work?</strong><br /><strong>A. </strong>I just liked working with the geriatric population. I started as a nurse and working in nursing homes, and really enjoyed it, but always thought, like a lot of nurses, I wanted to try working in a hospital. I worked in the ER, I worked in oncology, and after I did that for two years, I thought I really missed the contact with the geriatric population. Caring for them, they can tell you so many stories about what they’ve done and where they’ve been. I felt it was more fulfilling.<br /><br /><strong>Q. You seem to have good relationships with many of the members of the program. What do people tell you they like about LIFE? </strong><br /><strong>A.</strong> I think that they like that it’s all inclusive—members can come here and get everything instead of having to go from their house to a doctor’s appointment, then to a senior center. They’ll come here and they can socialize for part of the day, see their physician—it’s all under one roof, and they enjoy that.<br />One of the other great benefits we offer is home care. So during the past few weeks, as it was snowing and temperatures were dropping, if they need to stay home and need care, we come out to them so they didn’t have to get bundled up and onto our bus to come in and get cared for.<br />When it snowed two years ago for about six straight days, we had people begging to come back in to socialize. This is their home away from home. They come here and have a light breakfast, but at lunchtime, they’re talking away. These are people who have had similar lives and similar experiences, and they just really like it. <br /><br /><strong>Q. What about the employees?</strong> <br /><strong>A. </strong>I think that the people [who work] here are very passionate about what they do. If you talk to any of the nurse practitioners here, you’ll hear that we’re proud of the fact that we are the only owned and operated PACE program with the School of Nursing. We’re proud that we’re the only PACE program that is Magnet-certified through [American Nurses Credentialing Center’s] Pathway to Excellence Program, and we were on President Obama’s Higher Education Community Service Honor Roll with Distinction in 2009. That was a big honor, and the proposal wasn’t written by an administrative person—it was one of the employees here who thought of the idea and wrote it because he believed it was such a great program. In general, the employees support it and really believe in it, which is nice.<br /><br /><strong>Q. In what ways is the LIFE program beneficial to family members and caregivers of older individuals? </strong><br /><strong>A. </strong>Think about it this way—when you have a loved one who is debilitated at home, it’s pretty much a 24/7 job. Even when you go to work, you’re worried about that loved one. They can come here Monday through Friday, and you know where they are and that they’re being cared for. It’s a respite for the family—a break. The six to eight hours a day they’re here is time that family members can go food shopping, go to work—time that they might not have had before programs like this existed.<br />One of the other benefits is we do give respite care. We’re not here 24/7, and people don’t live here. But say your grandmother was in the program, and you and family wanted to go down the shore. We will find her a respite place for a week. We’ve offered that to all of our families, because we don’t want them to burn out. We want to be here for the assistance, but again, it’s really a partnership.<br /><br /><strong>Q. Do you think the challenges for caregivers and the older population have changed in recent years? </strong><br /><strong>A.</strong> I think that since the economy’s been worse, it has really changed, because you have a lot of people who are unemployed or underemployed, working second and third jobs to make ends meet, and it makes it that much more difficult for them to care for their loved one. This program is a lifesaver because somebody might have to drop their loved one off at 6 a.m. because they recently changed jobs and have to commute farther now—we accommodate that for our members. And we do it because we want to do what it takes for our members to stay in their community. <br /><br /><strong>Q. How do you think programs like LIFE benefit the communities they serve?</strong> <br /><strong>A. </strong>It keeps people in their homes so that they can continue to go to the same church that they’ve been going since 10, 12 years old. This is an area where a lot of the membership here owns their homes, and they’ve been in those homes for 30, 40 years. Taking them out and putting them into a nursing home or sending them somewhere to a different zip code, it starts to erode the community. People want to stay where they’ve been. And in this community [surrounding] the University—Penn’s goal is to strengthen it, not to weaken it. This program, I think, definitely strengthens it. <br /><br /><strong>Q. Could you speak about the research and education of the LIFE program’s mission?</strong><br /><strong>A.</strong> We have a tripartite mission: research, education, and the practice. A lot of research takes place here from the School of Nursing, as well as other schools within the University, such as f Dental Medicine, the School of Social Policy & Practice, and Wharton. We do a lot of clinical education; all the nurses go through one rotation here.<br />For research to be done here, [the researchers] must present to the Council of Elders, a group of the membership that has to approve any research project. They have a say in it here, which is important. <br /> Recently, we’ve had studies about the relationship between incontinence and exercise, and hospitalizations among African Americans. The council approved both of them because they felt they were worthwhile for the community.<br /><br /><strong>Q. What’s your favorite part of working with LIFE program?</strong><br /><strong>A.</strong> Seeing the satisfaction that the members get from being in the LIFE program. A lot of them know that if we didn’t have this program, there would be a lot of uncertainty in their lives. They don’t know if they would be living in a nursing home, in some other kind of placement, or in and out of a hospital.<br />I think when you see someone who comes in and they’re really not in good shape, you’re part of their life; you meet them, you hear in meetings that they’re not healthy and people are concerned. Then the whole team assesses them and we put them on a care plan, and you see them four months later, and they’re in arts and crafts or doing ceramics. You just say to yourself, ‘We’re doing right thing.’</p>", "guid" : "http://www.upenn.edu/pennnews/current/2014-02-13/interviews/staff-qa-daniel-drake", "id" : 11548147, "images" : [ { "caption" : "<p>Mark Stehle<br /></p>", "id" : 11548149, "link" : "http://www.upenn.edu/pennnews/current/sites/www.upenn.edu.pennnews.current/files/images/ Drake-story.jpg", "name" : "Drake-story.jpg" } ], "link" : "http://www.upenn.edu/pennnews/current/2014-02-13/interviews/staff-qa-daniel-drake", "pubdate" : "2014-02-13T05:00:00Z", "source_url" : "", "teaser" : "As Daniel Drake makes his way through the halls of the Living Independently For Elders (LIFE) program headquarters, almost every person he passes shakes his hand, nods “hello,” greets him by name. And despite having a jam-packed itinerary as the CEO of the all-inclusive elder care center, Drake knows their names as well.\n\n“We have 422 members, and I’ve gotten to know a great majority of them,” says Drake, who took the helm of the School of Nursing’s LIFE program four years ago. “I have lunch with them. And when I see them, believe me, they tell you the positives of the program.”\nAnd for the members of the program, who are able to spend time at home and avoid round-the-clock nursing home care thanks to LIFE, the positives are aplenty. Since 1998, LIFE’s innovative program has been providing all necessary preventative, primary health, acute, and long-term care and transportation during", "title" : "Staff Q&A with Daniel Drake" },{ "cateegory_id" : 15, "category" : "Other", "content_type" : "event", "date_occurs" : "2014-03-05T05:00:00Z", "description" : "SNAP GBMs including pizza lunches and featured speakers on various topics throughout the semester.", "end_time" : "13:00:00", "id" : 11552633, "link" : "http://www.upenn.edu/calendar/?event=54232053", "link_id" : 54232053, "location" : "Claire M. Fagin Hall, Room TBD", "owner" : "Nursing Bulkload", "owner_id" : 542, "privacy" : "0", "room" : "", "school" : "School of Nursing", "school_id" : 8, "start_time" : "12:00:00", "student" : "0", "title" : "Student Nurses at Penn General Body Meeting", "url" : "http://www.nursing.upenn.edu/nursing_events/Detail/EventDetailPopup .aspx?AspXPage=g%5F6D07339D7A7E44178E911BBC20823873:%2540ID%3D536" }], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 2, "number_of_pages" : -1, "previous_page_number" : 1, "results_per_page" : 20 } } |
Campus map item filter service |
---|
This service allows the retrieval of all campus items that show on the facilities map or the filtering of those items along with a simple text search. For a more
complex text search, use the news / events / maps searching API.
Acceptable URL parameters for filtering can be retrieved from the
Campus map item filter parameters service.
Sample usages:
{ "result_data" : [ { "additional_text" : "", "address" : "33rd Street at Shoemaker Green", "aka" : "All Wars Memorial", "architect" : "Rudy: Charles", "art_type" : "Bronze and Marble", "building_code" : "", "campus_item_images" : [ { "id" : 10457138, "image_url" : "http://www.facilities.upenn.edu/sites/default/files/styles/ photogallery_main_640x400px/public/art051.jpg?itok=nrvTDxZb", "thumbnail_url" : "http://www.facilities.upenn.edu/sites/default/files/styles/ thumbnail/public/art051.jpg?itok=DiTaOVa0", "title" : "War Memorial Flagpole" } ], "campus_item_type_id" : 10273207, "city" : "Philadelphia", "content_type" : "map", "description" : "A 6 figure grouping on 17' 0\", hexagonal granite base. Pole is 84' high. In November 1952, Harold E. Stassen, President of the University, led the dedicatory exercises on a rainy Saturday afternoon just before the Army vs. Penn football game of that year., The timing of the ceremony guaranteed a huge crowd and nation-wide press coverage., The printed program carried this title: \",Dedication of the War Memorial Honoring the Sons of the University Who Died in the Service of their Country.\",", "emergency_address" : "", "facilities_id" : 1812, "floors" : "", "gross_area" : "120' high x 84' diameter", "http_link" : "http://www.facilities.upenn.edu/maps/art/war-memorial-flagpole", "id" : 10457137, "keywords" : "Charles Rudy, Grant Simon, Smith Walk, Bronze, War Memorial, Art, Sculpture", "latitude" : "39.951401", "longitude" : "-75.190201", "pdf_link" : "", "state" : "PA", "title" : "War Memorial Flagpole", "year_built" : "1951", "zip_code" : "" } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 2, "number_of_pages" : 21, "previous_page_number" : 1, "results_per_page" : 20 } |
Campus map item filter parameters service |
---|
This service, which takes no parameters, allows user to programmatically access acceptable parameters that can be passed
to the Campus map item filter service
This service allows programmers to build the same pulldowns and entry fields that exist on the map search by
providing them with a list of maps and descriptions. Note that parameters that are fed by map MUST have one of the acceptable
map values as a value or an error will be returned.
For this service, result_data contains a map of acceptable parameters to pass, labeled "acceptable_map_filter_url_parameters_map".
If the possible values for the parameter are constrained to a map of values, that is indicated in the text, for instance: "building_type_id"
: "Use zero or more of the values from the map building_type_parameters_map". Ergo, when passing ?building_type_id=VALUE in the URL, VALUE
must be one of the acceptable values in the included map “building_type_parameters_map”.
Sample usage:
{ "result_data" : [ { "acceptable_map_filter_url_parameters_map" : { "asset_type_id" : "Use zero or more or the values from the map asset_type_parameters_map.", "building_type_id" : "Use zero or more of the values from the map building_type_parameters_map.", "school_id" : "Use zero or more of the values from the map school_parameters_map.", "description" : "A word or phrase to search for in the map item name or description - this is an exact text search, case insensitive. For more in depth searches, use the map / events / news search API.", "item_id" : "The id of a previously found campus map item." }, "asset_type_parameters_map" : { "11034724" : "Public Parking", "11034757" : "Public Art", "11033141" : "Bicycle Racks", "11034683" : "Discover Penn", "11033234" : "Building" }, "building_type_parameters_map" : { "11033236" : "All Buildings", "11033258" : "All Schools", "11033450" : "Athletics", "11033548" : "Current Construction", "11033271" : "Galleries + Performing Centers", "11033292" : "Libraries", "11034663" : "Off Campus: CA", "11034216" : "Off Campus: NJ", "11033338" : "Off Campus: PA", "11033265" : "Penn Hospitals", "11033235" : "Student Housing" }, "school_parameters_map" : { "11033277" : "Annenberg School for Communication", "11508169" : "Arts and Sciences", "11508194" : "Dental Medicine", "11508173" : "Design", "11508178" : "Education", "11508187" : "Engineering and Applied Science", "11508201" : "Law", "11508180" : "Nursing", "11508264" : "Off Campus", "11033257" : "Perelman School of Medicine", "11033506" : "School of Engineering and Applied Science", "11508171" : "Social Policy and Practice", "11508210" : "Veterinary Medicine", "11508185" : "Wharton: Philadelphia" } } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 2, "number_of_pages" : -1, "previous_page_number" : 1, "results_per_page" : 30 } |
Dining menus and venues |
---|
This api has been deprecated by the vendor and will not be supported after 03/16/2016 - please see Dining V2
Paging is not supported in this API. All applicable results are always returned
This service allows access to dining menus and venues. Menus need a venue ID and can be specified as either daily or monthly;
all venues are returned in one list in the venues service. Be aware that not every venue will have menus available and the vendor
service can be quite slow when a client requests access to a menu for a venue that does not exist.
Menus sample usages:
{ "result_data" : {"Document": { "menudate": "9/11/2014", "tblMenu": {"tblDayPart": [ { "tblStation": [ { "txtStationDescription": "expo", "tblItem": { "txtDescription": "ham\ncheese\nmushrooms\npeppers\nonions\n broccoli\nspinach\n\negg whites and egg beaters available upon request", "tblAttributes": {"txtAttribute": {"description": "made without gluten-containing ingredients"}}, "txtNutritionInfo": "", "txtPrice": "", "txtTitle": "made to order omelets" } }, { "txtStationDescription": "hemispheres", "tblItem": { "txtDescription": "local flavored yogurts\nfresh cut fruit\n assorted breakfast pastries\nbread and toast bar", "tblAttributes": {"txtAttribute": {"description": "vegetarian"}}, "txtNutritionInfo": "", "txtPrice": "", "txtTitle": "breakfast bar" } }, { "txtStationDescription": "kettles", "tblItem": [ { "txtDescription": "local\nfree range arnold farms sunny ridge farm", "tblAttributes": {"txtAttribute": [ {"description": "farm to fork"}, {"description": "made without gluten-containing ingredients"} ]}, "txtNutritionInfo": "", "txtPrice": "", "txtTitle": "hard cooked eggs" }, { "txtDescription": "southern style\nslow cooked", "tblAttributes": {"txtAttribute": {"description": "vegan"}}, "txtNutritionInfo": "", "txtPrice": "", "txtTitle": "grits" } ] } ], "txtDayPartDescription": "Breakfast" ]} "location": "University of Pennsylvania Hill House", "tblMessages": {"txtNoMenuMessage": ""} }}, "service_meta" : { "current_page_number" : 0, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 0, "previous_page_number" : 0, "results_per_page" : 0 } }Sample venue result with one record: { "result_data" : {"document": {"venue": [ { "id": 593, "facilityURL": "http://cms.business-services.upenn.edu/dining/ hours-locations-a-menus/residential-dining/1920-commons.html", "dateHours": [ { "date": "2014-09-11", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] }, { "date": "2014-09-12", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "19:30:00" } ] }, { "date": "2014-09-13", "meal": [ { "open": "11:00:00", "type": "brunch", "close": "15:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "19:00:00" } ] }, { "date": "2014-09-14", "meal": [ { "open": "11:00:00", "type": "brunch", "close": "15:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "20:00:00" } ] }, { "date": "2014-09-15", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] }, { "date": "2014-09-16", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] }, { "date": "2014-09-17", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] } ], "weeklyMenuURL": "hhttps://esb.isc-seo.upenn.edu/8091/open_data/dining/menus/weekly/593", "dailyMenuURL": "https://esb.isc-seo.upenn.edu/8091/open_data/dining/menus/daily/593", "name": "1920 Commons", "venueType": "residential" } ]}}, "service_meta" : { "current_page_number" : 0, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 0, "previous_page_number" : 0, "results_per_page" : 0 } } |
Dining menus and venues V2 |
---|
Paging is not supported in this API. All applicable results are always returned
This service allows access to dining menus and venues. Menus need a venue ID and dates can be passed comma separated.
all venues are returned in one list in the venues service. Be aware that not every venue will have menus available and the vendor
service can be quite slow when a client requests access to a menu for a venue that does not exist.
Menus sample usages:
{ "result_data" : { "cafes" : { "593" : { "name" : "1920 Commons", "address" : "3800 Locust Walk", "city" : "Philadelphia", "state" : "PA", "zip" : "19104", "latitude" : "39.95253", "longitude" : "-75.19932", "description" : "<p><strong>1920 Commons</strong>, the largest café on campus, is located on Locust Walk, right across the 38th Street Bridge. Serving lunch and dinner during the week and brunch and dinner on weekends, 1920 Commons offers a variety of dishes sure to please the pickiest of palates. Enjoy a bountiful, seasonal salad bar; made-to-order deli; fresh, hot pizzas; comfort cuisine; savory soups; veggie, chicken, and beef burgers grilled to perfection; an ever-changing action station; or delectable desserts. It’s all here!</p>", "message" : "0", "eod" : "02:00", "timezone" : "America/New_York", "menu_type" : "dynamic", "menu_html" : "<p>1920 </p>", "weekly_schedule" : "<p class='current-status'>Weekly Schedule</p> <ul class='list-unstyled'><li class='day-part dotted-leader-container'> <span class='dotted-leader-content pull-left'>Brunch</span> <span class='dotted-leader-content pull-right'>Sat-Sun, 11:00 am - 3:00 pm </span></li><li class='day-part dotted-leader-container'> <span class='dotted-leader-content pull-left'>Lunch</span> <span class='dotted-leader-content pull-right'>Mon-Fri, 11:00 am - 2:00 pm </span></li><li class='day-part dotted-leader-container'> <span class='dotted-leader-content pull-left'>Dinner</span> <span class='dotted-leader-content pull-right'>Mon-Thu, 5:00 pm - 9:00 pm </span></li><li class='day-part dotted-leader-container'> <span class='dotted-leader-content pull-left'>Dinner</span> <span class='dotted-leader-content pull-right'>Fri-Sat, 5:00 pm - 7:30 pm </span></li><li class='day-part dotted-leader-container'> <span class='dotted-leader-content pull-left'>Dinner</span> <span class='dotted-leader-content pull-right'>Sun, 5:00 pm - 8:00 pm </span></li></ul><br><span> <a class='hidden-small' href='http://legacy.cafebonappetit.com/weekly-menu/86706' target='_blank'> View/Print Weekly Menu</a></span>", "days" : [ { "date" : "2015-09-16", "dayparts" : [ { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "21:00", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2015-09-17", "dayparts" : [ { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "21:00", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2015-09-18", "dayparts" : [ { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:30", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2015-09-19", "dayparts" : [ { "id" : "2", "starttime" : "11:00", "endtime" : "15:00", "message" : "", "label" : "Brunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:30", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2015-09-20", "dayparts" : [ { "id" : "2", "starttime" : "11:00", "endtime" : "15:00", "message" : "", "label" : "Brunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "20:00", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2015-09-21", "dayparts" : [ { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "21:00", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2015-09-22", "dayparts" : [ { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "21:00", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" } ] } } }, "service_meta" : { "current_page_number" : 0, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 0, "previous_page_number" : 0, "results_per_page" : 0 } }Sample full menu result with one record (note that data has been omitted, this is to give an idea of structure): { "result_data" : { "days" : [ { "date" : "2015-09-09", "cafes" : { "593" : { "name" : "1920 Commons", "menu_id" : "86705", "dayparts" : [ [ { "starttime" : "11:00", "endtime" : "14:00", "id" : "3", "label" : "Lunch", "abbreviation" : "L", "stations" : [ { "order_id" : "0001-7549", "id" : "7549", "label" : "dan's daily dish", "soup" : 0, "items" : [ "3994140", "3994142", "3994134", "3994138" ] }, { "order_id" : "0003-4434", "id" : "4434", "label" : "kettles", "soup" : 0, "items" : [ "3899236", "4000324", "3899239" ] }, { "order_id" : "0004-4435", "id" : "4435", "label" : "comfort", "soup" : 0, "items" : [ "3899189", "3899188", "3899190", "3842312" ] }, { "order_id" : "0006-4601", "id" : "4601", "label" : "deli", "soup" : 0, "items" : [ "3899113", "1720542", "3311553" ] }, { "order_id" : "0007-4440", "id" : "4440", "label" : "expo", "soup" : 0, "items" : [ "3899279" ] }, { "order_id" : "0008-4600", "id" : "4600", "label" : "pizza", "soup" : 0, "items" : [ "3898878", "3898883", "1640808" ] }] }, { "starttime" : "17:00", "endtime" : "21:00", "id" : "4", "label" : "Dinner", "abbreviation" : "D", "stations" : [ { "order_id" : "0001-7549", "id" : "7549", "label" : "dan's daily dish", "soup" : 0, "items" : [ "3994145", "3994147", "3994138" ] }, { "order_id" : "0003-4434", "id" : "4434", "label" : "kettles", "soup" : 0, "items" : [ "3899236", "4000324", "3899239" ] }, { "order_id" : "0004-4435", "id" : "4435", "label" : "comfort", "soup" : 0, "items" : [ "3899255", "3899191", "3899256", "3842312" ] }, { "order_id" : "0006-4601", "id" : "4601", "label" : "deli", "soup" : 0, "items" : [ "3899113", "1720542", "3311553" ] } ] } ] ] } } }], "items" : { "3115576" : { "id" : "3115576", "label" : "1000 island", "description" : "", "zero_entree" : "0", "cor_icon" : { "1" : "vegetarian" }, "ordered_cor_icon" : { "0005-0001" : { "id" : "1", "label" : "vegetarian" } }, "price" : "", "nutrition" : { "kcal" : "", "well_being" : "", "well_being_image" : "" }, "special" : 0, "tier3" : 0, "rating" : "", "options" : [ ], "station" : "<strong>@house-made dressings</strong>", "nutrition_link" : "" }, "3898784" : { "id" : "3898784", "label" : "corn pasta du jour", "description" : "made without gluten-containing ingredients corn pasta baked with sun dried tomato and fresh basil", "zero_entree" : "0", "cor_icon" : { "1" : "vegetarian", "9" : "Made without Gluten-Containing Ingredients" }, "ordered_cor_icon" : { "0005-0001" : { "id" : "1", "label" : "vegetarian" }, "0007-0009" : { "id" : "9", "label" : "Made without Gluten-Containing Ingredients" } }, "price" : "", "nutrition" : { "kcal" : "", "well_being" : "", "well_being_image" : "" }, "special" : 1, "tier3" : 0, "rating" : "", "options" : [ ], "station" : "<strong>@avoiding gluten?</strong>", "nutrition_link" : "" } }, "cor_icons" : { "1" : { "sort" : "5", "label" : "vegetarian", "description" : "Vegetarian: Contains no meat, fish, poultry, shellfish or products derived from these sources but may contain dairy or eggs", "image" : "http://legacy.cafebonappetit.com/images/public/menu-item-type-c9d18b.png?v=1408293613", "is_filter" : "Y" }, "9" : { "sort" : "7", "label" : "Made without Gluten-Containing Ingredients", "description" : "Made without Gluten-Containing Ingredients. Due to our open kitchens that handle gluten, we cannot guarantee that items made without gluten-containing ingredients are “gluten-free,” as defined by the FDA. We make every effort to avoid gluten cross-contact; however there is always the potential for cross-contact with other gluten-containing food items, particularly in our self-serve facilities. We encourage guests to speak to the chef or manager regarding any questions about ingredients.", "image" : "http://legacy.cafebonappetit.com/images/public/menu-item-type-ce9d00.png?v=1407481204", "is_filter" : "Y" }, "4" : { "sort" : "4", "label" : "vegan", "description" : "Vegan: Contains absolutely no animal or dairy products.", "image" : "http://legacy.cafebonappetit.com/images/public/menu-item-type-668e3c.png?v=1408293613", "is_filter" : "Y" }, "18" : { "sort" : "3", "label" : "humane", "description" : "Humane: Contains humanely raised meat, poultry, or eggs. Must be certified by a credible third-party animal welfare organization.\n", "image" : "http://legacy.cafebonappetit.com/images/public/menu-item-type-ebce7b.png?v=1408293613", "is_filter" : "Y" }, "3" : { "sort" : "2", "label" : "seafood watch", "description" : "Seafood Watch: Contains seafood that meets the Monterey Bay Aquarium's Seafood Watch guidelines for commercial buyers.", "image" : "http://legacy.cafebonappetit.com/images/public/menu-item-type-43c4b7.png?v=1408293613", "is_filter" : "Y" }, "6" : { "sort" : "1", "label" : "farm to fork", "description" : "Farm to Fork: Contains seasonal, minimally processed ingredients from a local farm, ranch, or fishing boat.", "image" : "http://legacy.cafebonappetit.com/images/public/menu-item-type-d58f59.png?v=1408293613", "is_filter" : "N" } } }, "service_meta" : { "current_page_number" : 0, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 0, "previous_page_number" : 0, "results_per_page" : 0 } }Sample item details result with one record: { "result_data" : { "items" : { "3899220" : { "id" : "3899220", "label" : "tomato tzatziki sauce and pita", "description" : "finely diced tomato, lemon zest, fresh oregano and vegan mayo", "zero_entree" : "0", "cor_icon" : { "4" : "vegan" }, "price" : "", "nutrition_summary" : { "kcal" : "", "well_being" : "", "well_being_image" : "" }, "nutrition_details" : { }, "ingredients" : "", "nutrition_info" : "", "special" : 1, "rating" : "", "options" : [ ], "vendors" : [ ] } }, "cor_icons" : { "4" : { "label" : "vegan", "description" : "Vegan: Contains absolutely no animal or dairy products.", "image" : "http://legacy.cafebonappetit.com/images/public/menu-item-type-668e3c.png?v=1408293613", "is_filter" : "Y" } }, "vendors" : { }, "reviews" : { } }, "service_meta" : { "current_page_number" : 0, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 0, "previous_page_number" : 0, "results_per_page" : 0 } }Sample venue result with one record: { "result_data" : {"document": {"venue": [ { "id": 593, "facilityURL": "http://cms.business-services.upenn.edu/dining/ hours-locations-a-menus/residential-dining/1920-commons.html", "dateHours": [ { "date": "2014-09-11", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] }, { "date": "2014-09-12", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "19:30:00" } ] }, { "date": "2014-09-13", "meal": [ { "open": "11:00:00", "type": "brunch", "close": "15:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "19:00:00" } ] }, { "date": "2014-09-14", "meal": [ { "open": "11:00:00", "type": "brunch", "close": "15:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "20:00:00" } ] }, { "date": "2014-09-15", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] }, { "date": "2014-09-16", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] }, { "date": "2014-09-17", "meal": [ { "open": "11:00:00", "type": "lunch", "close": "14:00:00" }, { "open": "17:00:00", "type": "dinner", "close": "21:00:00" } ] } ], "weeklyMenuURL": "hhttps://esb.isc-seo.upenn.edu/8091/open_data/dining/menus/weekly/593", "dailyMenuURL": "https://esb.isc-seo.upenn.edu/8091/open_data/dining/menus/daily/593", "name": "1920 Commons", "venueType": "residential" } ]}}, "service_meta" : { "current_page_number" : 0, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 0, "previous_page_number" : 0, "results_per_page" : 0 } }Sample venueFull result with one record: { "result_data" : { "campuses" : { "203" : { "name" : "University of Pennsylvania", "cafes" : { "593" : { "name" : "1920 Commons", "address" : "3800 Locust Walk", "city" : "Philadelphia", "state" : "PA", "zip" : "19104", "latitude" : "39.95253", "longitude" : "-75.19932", "description" : "<p><strong>1920 Commons</strong>, the largest café on campus, is located on Locust Walk, right across the 38th Street Bridge. Serving lunch and dinner during the week and brunch and dinner on weekends, 1920 Commons offers a variety of dishes sure to please the pickiest of palates. Enjoy a bountiful, seasonal salad bar; made-to-order deli; fresh, hot pizzas; comfort cuisine; savory soups; veggie, chicken, and beef burgers grilled to perfection; an ever-changing action station; or delectable desserts. It’s all here!</p>", "message" : "0", "eod" : "02:00", "timezone" : "America/New_York", "menu_type" : "dynamic", "menu_html" : "<p>9101920 </p>", "weekly_schedule" : "<p class='current-status'>Weekly Schedule</p><ul class='list-unstyled'> <li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Breakfast</span> <span class='dotted-leader-content pull-right'>Mon-Fri, 7:00 am - 9:00 am</span></li> <li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Lunch</span> <span class='dotted-leader-content pull-right'>Mon-Fri, 11:00 am - 2:00 pm</span></li> <li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Dinner</span> <span class='dotted-leader-content pull-right'>Mon-Fri, 5:00 pm - 7:00 pm</span></li></ul><br> <div style='color:red;'><p class='current-status'>Special Hours</p><ul class='list-unstyled'> <li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Breakfast</span> <span class='dotted-leader-content pull-right'>June 13-17, 7:30 am - 10:00 am</span></li><li class='day-part'> <span style='text-transform: none;'><i class='cafe-hour-message'>Summer Hours starting June 13th</i></span> </li><li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Lunch</span> <span class='dotted-leader-content pull-right'>June 13-17, 11:00 am - 2:00 pm</span></li><li class='day-part'> <span style='text-transform: none;'><i class='cafe-hour-message'>Summer Hours starting June 13th</i></span> </li><li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Dinner</span> <span class='dotted-leader-content pull-right'>June 13-17, 5:00 pm - 7:00 pm</span></li><li class='day-part'> <span style='text-transform: none;'><i class='cafe-hour-message'>Summer Hours starting June 13th</i></span> </li><li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Brunch</span> <span class='dotted-leader-content pull-right'>June 18-19, 11:00 am - 2:00 pm</span></li> <li class='day-part dotted-leader-container'><span class='dotted-leader-content pull-left'>Dinner</span> <span class='dotted-leader-content pull-right'>June 18-19, 5:00 pm - 7:00 pm</span></li></ul></div><br> <span><a class='hidden-small' href='http://legacy.cafebonappetit.com/weekly-menu/114225' target='_blank'> View/Print Weekly Menu</a></span>", "days" : [ { "date" : "2016-06-13", "dayparts" : [ { "id" : "1", "starttime" : "07:30", "endtime" : "10:00", "message" : "Summer Hours starting June 13th", "label" : "Breakfast" }, { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "Summer Hours starting June 13th", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:00", "message" : "Summer Hours starting June 13th", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2016-06-14", "dayparts" : [ { "id" : "1", "starttime" : "07:30", "endtime" : "10:00", "message" : "Summer Hours starting June 13th", "label" : "Breakfast" }, { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "Summer Hours starting June 13th", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:00", "message" : "Summer Hours starting June 13th", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2016-06-15", "dayparts" : [ { "id" : "1", "starttime" : "07:30", "endtime" : "10:00", "message" : "Summer Hours starting June 13th", "label" : "Breakfast" }, { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "Summer Hours starting June 13th", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:00", "message" : "Summer Hours starting June 13th", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2016-06-16", "dayparts" : [ { "id" : "1", "starttime" : "07:30", "endtime" : "10:00", "message" : "Summer Hours starting June 13th", "label" : "Breakfast" }, { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "Summer Hours starting June 13th", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:00", "message" : "Summer Hours starting June 13th", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2016-06-17", "dayparts" : [ { "id" : "1", "starttime" : "07:30", "endtime" : "10:00", "message" : "Summer Hours starting June 13th", "label" : "Breakfast" }, { "id" : "3", "starttime" : "11:00", "endtime" : "14:00", "message" : "Summer Hours starting June 13th", "label" : "Lunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:00", "message" : "Summer Hours starting June 13th", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2016-06-18", "dayparts" : [ { "id" : "2", "starttime" : "11:00", "endtime" : "14:00", "message" : "", "label" : "Brunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:00", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" }, { "date" : "2016-06-19", "dayparts" : [ { "id" : "2", "starttime" : "11:00", "endtime" : "14:00", "message" : "", "label" : "Brunch" }, { "id" : "4", "starttime" : "17:00", "endtime" : "19:00", "message" : "", "label" : "Dinner" } ], "status" : "open", "message" : "" } ] } } } } }, "service_meta" : { "current_page_number" : 0, "error_text" : "", "next_page_number" : 0, "number_of_pages" : 0, "previous_page_number" : 0, "results_per_page" : 0 } } |
Directory search service |
---|
Paging is not supported in this API. Up to twenty results are returned for each query. For more finite details, enter more search criteria.
This service allows the search of the directory using particular paremeters.
Sample usages:
{ "result_data" : [ { "additional_data_available" : "N", "list_affiliation" : "Staff - PROGRAMMER ANALYST SR", "list_email" : "tfunke@isc.upenn.edu", "list_name" : "FUNKE, TOBIAS", "list_organization" : "Administrative Information Technology and Data Admin", "list_phone" : "", "list_phone_type" : "", "list_prefix" : "", "list_title_or_major" : "PROGRAMMER ANALYST SR", "listed_in_dir_flag" : "", "person_id" : "jhs878sfd03b38b0d463b16320b5e438" } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 1, "number_of_pages" : 1, "previous_page_number" : 1, "results_per_page" : 20 } } |
Directory person details |
---|
Paging is not supported in the API as only one record is returned.
This service allows the retrieval of additional information regarding a person, using the person_id field from results from the Directory search service.
Sample usages:
{ "result_data" : [ { "address_views" : [ { "address_lines" : [ "1234 RYAN/2321" ], "comments" : "", "display_type" : "Work" } ], "affiliation_views" : [ { "affilliation_info" : "Administrative Information Technology and Data Admin" } ], "detail_name" : "TOBIAS FUNKE", "email_views" : [ { "address" : "tfunke@isc.upenn.edu", "comments" : "" } ], "home_page_views" : [ { "comments" : " ", "home_page" : "http://tfunke.com" } ], "list_affiliation" : "Staff", "list_email_pub" : "tfunke@isc.upenn.edu", "list_name" : "FUNKE, DR TOBIAS", "list_org_code_pub" : "", "list_organization_pub" : "", "list_phone_pub" : "215-898-1234", "list_phone_type_pub" : "", "list_title_pub" : "PROGRAMMER ANALYST SR", "partner_view" : { "partner_name" : "" }, "person_id" : "jhs878sfd03b38b0d463b16320b5e438", "phone_views" : [ { "comments" : "", "display_type" : "Work", "extension" : "", "number" : "215-898-1234" } ], "preferred_affiliation" : 0, "preferred_email" : 0, "preferred_name" : 0, "preferred_phone" : 0 } ], "service_meta" : { "current_page_number" : 1, "error_text" : "", "next_page_number" : 1, "number_of_pages" : 1, "previous_page_number" : 1, "results_per_page" : 20 } } |
Transit API wrapper | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Paging information is ignored within this api; all applicable results are always returned.
FeedsA feed is a stream of data that is parsed into JSON. In the feeds demonstrated below, some have starting and ending dates that should be typed in where indicated before attempting to download a file. Dates should be entered in the following format: MM/DD/YYYY%20HH24:MI:SS For APC Data packets:https://esb.isc-seo.upenn.edu/8091/open_data/transit/apc?start={enter_Starting_Date_here}&end={enter_Ending_Date_here} For MDT data packets: https://esb.isc-seo.upenn.edu/8091/open_data/transit/mdt?start={enter_Starting_Date_here}&end={enter_Ending_Date_here} APC ‘Trans’ feed: This feed will provide detail of boardings, alightings, by vehicle and stop, including the passenger load leaving the stop (this is only for vehicles equipped with APC hardware): https://esb.isc-seo.upenn.edu/8091/open_data/transit/transapc?start={enter_Starting_Date_here}&end={enter_Ending_Date_here} This will provide a listing of all current stops: https://esb.isc-seo.upenn.edu/8091/open_data/transit/stopinventory This will provide a spreadsheet of arrival, departure, dwell, travel and trip times for the dates requested: https://esb.isc-seo.upenn.edu/8091/open_data/transit/stoptimes?start={enter_Starting_Date_here}&end={enter_Ending_Date_here} Map Feeds/iFramesWhere a client is looking to program a map from the Syncromatics’ public portals and embed it into a display (e.g. an LCD screen) or within an application, the following provide links that can be used to program the map in various states:
Real Time Feed API (for 511 systems or 3rd party applications)Configuration API API Endpoint: https://esb.isc-seo.upenn.edu/8091/open_data/transit/511/Configuration Request Type: GET Result Format: JSON Result Structure:
Result Sample in JSON Format:
Prediction APIAPI Endpoint: https://esb.isc-seo.upenn.edu/8091/open_data/transit/511/Prediction/ Request Type: GET Result Format: JSON Result Structure:
Result Sample in JSON Format:
Arrived/Arrival APIAPI Endpoint: https://esb.isc-seo.upenn.edu/8091/open_data/transit/511/Arrived/ [Gets all Arrived/Arrival data] API Endpoint: https://esb.isc-seo.upenn.edu/8091/open_data/transit/511/Arrived/{routeId}/{stopId}/{startTime}/{endTime}/ [Gets Arrived/Arrival data for the specified routeId, the specified stopId, and the specified start and end time] Ex. https://esb.isc-seo.upenn.edu/8091/open_data/transit/511/Arrived/381/70123/2013-06-10T01t00t00/2013-06-11T12t00t00/ *The startTime and endTime format should be yyyy-MM-ddTHHtmmtss. (notice the T in between the dd and HH, also t is used as a separator for the time, notice the t between the HH and mm) Request Type: GET if requesting all Arrived/Arrival Data routeId (the unique identifier of the route) & stopId (the unique identifier of the stop) & start (the start time to find arrival/arrived data) & stop (the stop time to find arrival/arrived data) if requesting single instance of Arrived/Arrival Data for a specific stop on a specific route between specific times Result Format: JSON Result Structure:
Result Sample in JSON Format:
Routes & Stops DatabasesHere are the full sets of stops and routes for all of the PENN services. RouteID and StopID are required for the arrival feed shown above.
|
Sample java usage |
---|
/** * Searching courses. */ public static void executeCourseSearchService(){ // URL to call services. String url ="https://esb.isc-seo.upenn.edu/8091/open_data/course_section_search"; // Params map to place any values into. Map<String, Object> params = new HashMap<String, Object>(); params.put("course_id", "ACCT101"); // Call the service String result = executeRest(url, params); // Convert to json object and check for success try{ JsonData jsonData = new JsonData(result); if (!StringUtils.isBlank(jsonData.get("service_meta") .get("error_text").asText())){ throw new RuntimeException(jsonData.get("service_meta") .get("error_text").asText()); } // More than one result in the object? if (jsonData.get("result_data").isArray()){ JsonNode courseSections = jsonData.get("result_data"); for (JsonNode courseSection : courseSections){ // Do logic, hydrate objects, etc System.out.println(courseSection.get("activity")); } } else { // Only one object returned, etc } } catch (Exception e){ throw new RuntimeException(e); } } /** * Execute a rest call to the given URL and return the objects. * @param restUrl is the url to call. * @param params is the map of any query params, can be null, do not URL escape these. * @return the string value of the body. */ private static String executeRest( String restUrl, Map<String, Object> params){ try{ // Get an http client. HttpClient httpClient = new HttpClient(); // Set the URL and path to the correct method. HttpMethod httpMethod = new GetMethod(restUrl); // Set the authorization data. httpMethod.addRequestHeader(new Header("Authorization-Bearer", "UPENN_OD_emjT_100212")); httpMethod.addRequestHeader(new Header("Authorization-Token", "2bbk83v7ftf9kg3i78hi4j5kqibsc")); httpMethod.addRequestHeader(new Header("Content-Type", "application/json; charset=utf-8")); // Add params if we have them. if (params != null && params.size() > 0){ List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); for (String key : params.keySet()){ nameValuePairs.add(new NameValuePair(key, String.valueOf(params.get(key)))); } httpMethod.setQueryString( (NameValuePair[]) nameValuePairs.toArray(new NameValuePair[nameValuePairs.size()])); } // Execute the method. int responseCode = httpClient.executeMethod(httpMethod); // Check for failure. if (responseCode != 200){ throw new RuntimeException("Expected 200 but got: " + responseCode + " Error body: " + httpMethod.getResponseBodyAsString()); } // Get the response JSON. String result = httpMethod.getResponseBodyAsString(); // Return the object. return result; } catch (Exception e){ throw new RuntimeException(e); } } |
Contact information |
---|
opendata-help@lists.upenn.edu |