Table of contents
Overview
Security and content type
Paging
Service meta
Campus map item filter service
Campus map item filter parameters service
Course catalog search service
Course section search service
Course section search parameters service
Dining service Deprecated see V2
Dining service V2
Directory search service
Directory person details
News / events / map search service
Transit data service
Sample Java usage
Contact information
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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/course_info/ACCT/?page_number=2

All web services results contain an array with two objects: result_data and service_meta. The result_data contains the results of the query. This will either be course information, course section information, or information regarding available parameters to search course sections with. The service_meta contains information regarding paging and any error information. Service_meta should always be checked for any contents in the error_text field before continuing processing. PennInTouch, the host of the service, does become unavailable for a short amount of time once a night at varied times in order to refresh data. The outage generally consists of a ten minute period.

Security
Security credentials can be obtained through the following link:

https://secure.www.upenn.edu/computing/da/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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/course_info/ACCT/?page_number=2&number_of_results_per_page=20
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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/course_info/ACCT/
  • https://esb.isc-seo.upenn.edu/8091/open_data/course_info/ACCT/101/

Sample result with one record:

{
  "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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/course_section_search?course_id=ACCT101001
  • https://esb.isc-seo.upenn.edu/8091/open_data/course_section_search?course_id=ACCT&instructor=Altamuro&term=2013C
  • https://esb.isc-seo.upenn.edu/8091/open_data/course_section_search?course_id=ACCT&course_level_at_or_above=100&program=BFS

Sample result with one record:

{
  "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 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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/course_section_search_parameters/

Sample result:

{
  "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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/news_events_maps?source=news&description=penn%20AND%20Gutmann

Sample result with one of each type of record (news, event, map):

  "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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/maps?description=library
  • https://esb.isc-seo.upenn.edu/8091/open_data/maps?school_id=10588222&school_id=10588201
  • https://esb.isc-seo.upenn.edu/8091/open_data/maps?building_type_id=10285190&description=wharton
  • https://esb.isc-seo.upenn.edu/8091/open_data/maps?item_id=

Sample result with one record:

{
  "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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/map_filter_parameters/

Sample result:

{
  "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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/dining/menus/weekly/636
  • https://esb.isc-seo.upenn.edu/8091/open_data/dining/menus/daily/636
  • https://esb.isc-seo.upenn.edu/8091/open_data/dining/venues

Sample menu result with one record:

{
 "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:

  • Use the following URL to get a list of all venues, this format will be supported ongoing but has less information than venuesFull as it maps the vendor data to a format originally provided by Penn. Please see the venuesFull service to get all information:
    https://esb.isc-seo.upenn.edu/8091/open_data/dining/v2/?service=venues
  • Use the following URL to get a list of all venues:
    https://esb.isc-seo.upenn.edu/8091/open_data/dining/v2/?service=venuesFull
  • Use the following URL to get the cafe day parts and hours:
    https://esb.isc-seo.upenn.edu/8091/open_data/dining/v2/?service=cafes&cafe=593
  • Then, use the following URL to get the full menu for a particular date or multiple dates
    https://esb.isc-seo.upenn.edu/8091/open_data/dining/v2/?service=menus&cafe=593&date=2015-09-09,2015-09-10
  • Then, use the following URL to get item details on a particular plate:
    https://esb.isc-seo.upenn.edu/8091/open_data/dining/v2/?service=items&item=3899220

Sample day parts and hours result with one record:

{
  "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" : "

1920 Commons, 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!

", "message" : "0", "eod" : "02:00", "timezone" : "America/New_York", "menu_type" : "dynamic", "menu_html" : "

9101920 

", "weekly_schedule" : "

Weekly Schedule

  • Breakfast Mon-Fri, 7:00 am - 9:00 am
  • Lunch Mon-Fri, 11:00 am - 2:00 pm
  • Dinner Mon-Fri, 5:00 pm - 7:00 pm

Special Hours

  • Breakfast June 13-17, 7:30 am - 10:00 am
  • Summer Hours starting June 13th
  • Lunch June 13-17, 11:00 am - 2:00 pm
  • Summer Hours starting June 13th
  • Dinner June 13-17, 5:00 pm - 7:00 pm
  • Summer Hours starting June 13th
  • Brunch June 18-19, 11:00 am - 2:00 pm
  • Dinner June 18-19, 5:00 pm - 7:00 pm

View/Print Weekly Menu", "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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/directory?last_name=smith&first_name=bob
  • https://esb.isc-seo.upenn.edu/8091/open_data/directory?organization=penn

Acceptable parameters to pass the the URL are:

  • first_name
  • last_name
  • email
  • affiliation (pass "FAC", "STU", "STAF", or "UPHS")
  • organization

The returned field person_id is the key that needs to be passed to the Directory person details web service, which can be used to gather additional information about a person if the field additional_data_available returns 'Y'.

Sample result with one record:

{
  "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:

  • https://esb.isc-seo.upenn.edu/8091/open_data/directory_person_details/PERSON_ID_HERE

Sample result with one record:

{
  "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.

Feeds

A 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/iFrames

Where 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:
URL Description
http://www.pennrides.com/map Map with top bar header

http://www.pennrides.com/map?showHeader=0

Map without top bar header
http://www.pennrides.com/map?showHeader=0&route=229 Map, no header, showing only 1 route
http://www.pennrides.com/map?showHeader=0&route=229,230 Map, no header, 2 routes (map feeds have a limit of ~6 routes at one time)
http://www.pennrides.com/map?showHeader=0&route=229,230&silent_disable_timeout=1 Map, no header, 2 routes, map doesn't timeout (used for public LCD displays for example)

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:

ConfigurationDataMessage [The wrapper for the message as specified]

|-ConfigurationData [The wrapper for the data as specified]

    |-agency [name of the agency]

    |-version [version of API]

    |-numStops [total number of stops]

    |-TimeStamp [time the endpoint/request was made]

    |-Route [an array of routes]

        |-key [the route's unique ID]

        |-title [the name of the route]

        |-Direction [direction of the route]

            |-dirType [always OutBound, since we don't do directions currently]

            |-key [always OutBound, since we don't do directions currently]

            |-title [always OutBound, since we don't do directions currently]

            |-containsAllStopsInRoute [always true because we are returning all possible stops]

            |-Stop [an array of stops for the route and direction]

                |-key [the stop's unique ID]

                |-title [the stop's name]

                |-stopOrder [the order of the stop with respect to the route and direction]

Result Sample in JSON Format:

{"ConfigurationDataMessage":{"ConfigurationData":{"agency":"marin","version":"1.0","numStops":364,"TimeStamp":"\/Date(1370987261412-0700)\/","Route":[{"key":381,"title":"233","Direction":{"dirType":"OutBound","key":"OutBound","title":"OutBound","containsAllStopsInRoute":true,"Stop":[{"key":71733,"title":"Villa Av & Glen Park Ave (Southbound)","stopOrder":190},{"key":71737,"title":"Villa Av & Myrtle Av (Southbound)","stopOrder":220},{"key":237365,"title":"Grand Av & Linden Ln (Eastbound)","stopOrder":320}]}},{"key":620,"title":"259 old","Direction":{"dirType":"OutBound","key":"OutBound","title":"OutBound","containsAllStopsInRoute":true,"Stop":[{"key":229582,"title":"Los Ranchitos Rd and Circle Rd (Southbound)","stopOrder":50},{"key":229588,"title":"Los Ranchitos Rd and Ranch Rd (Eastbound)","stopOrder":120}]}}

 

Prediction API

API Endpoint: https://esb.isc-seo.upenn.edu/8091/open_data/transit/511/Prediction/

Request Type: GET

Result Format: JSON

Result Structure:

PredictionDataMessage [The wrapper for the message as specified]

|-PredictionData [The wrapper for the data as specified]

    |-agency [name of the agency]

    |-version [version of API]

    |-numStops [total number of stops]

    |-TimeStamp [time the endpoint/request was made]

    |-StopPredictions [an array of predictions by stops]

        |-route [the route's unique ID to which the stop belongs to]

        |-dir [always OutBound, since we don't currently support directions]

        |-stop [the stop's Unique ID]

        |-Ptimes [an array of ptimes]

            |-PredictionType [always Arrival]

            |-PredictionTime [the predicted time with respect to the PredictionType]

    |-VehicleLocationData [an array of vehicle location data]

        |-route [the route's unique ID to which the Vehicle is currently traveling on]

        |-dir [always OutBound, since we don't currently support directions]

        |-VehicleLocation [an array of vehicle location (1 per each unique vehicle) for vehicles on the current route]

            |-tripId [We don't currently support trip id in this context]

            |-vehicleLat [the latitude position of a vehicle on the current route]

            |-vehicleLong [the longitude position of a vehicle on the current route]

Result Sample in JSON Format:

{"PredictionDataMessage":{"PredictionData":{"agency":"marin","version":"1.0","numStops":364,"TimeStamp":"\/Date(1370988858104-0700)\/","StopPredictions":[{"route":381,"dir":"OutBound","stop":70123,"Ptimes":[{"PredictionType":"Arrival","PredictionTime":"\/Date(1370991438104-0700)\/"}]},{"route":381,"dir":"OutBound","stop":238296,"Ptimes":[{"PredictionType":"Arrival","PredictionTime":"\/Date(1370990178105-0700)\/"},{"PredictionType":"Arrival","PredictionTime":"\/Date(1370989098105-0700)\/"}]}], "VehicleLocationData":[{"route": "381", "dir": "OutBound", "VehicleLocation":[{"tripId": "0", "vehicleLat": "34.00000", "vehicleLong":"118.00000"}]}]}}}

 

Arrived/Arrival API

API 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:

ArrivalStatusDataMessage [The wrapper for the message as specified]

|-errorText [Will only be present if there is an error with the request]

|-ArrivalStatusData [The wrapper for the data as specified. Contains an array of arrival status data. Will not be present if errorText is present]

    |-agency [name of the agency]

    |-ArrivalTime [time of arrival]

    |-route [version of API]

    |-dir [always OutBound, since we don't currently support directions]

    |-TimeStamp [time the endpoint/request was made]

    |-stop [the stop's Unique ID]

    |-TripId [the tripId associated with the stop and route and arrival time]

Result Sample in JSON Format:

{"ArrivalStatusDataMessage":{"ArrivalStatusData":[{"agency":"marin","ArrivalTime":"\/Date(1370988858104-0700)\/","route":381","dir":"OutBound","TimeStamp":"\/Date(1370988858104-0700)\/","stop":"70123", "TripId":"1234"},{"agency":"marin","ArrivalTime":"\/Date(1370988858104-0700)\/","route":233","dir":"OutBound","TimeStamp":"\/Date(1370908858104-0700)\/","stop":"20123", "TripId":"1245"}]}}

 

 

Routes & Stops Databases

Here 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.

 

For PENN:

 

StopId

RtpiNumber

StopName

RouteId

RouteName

Latitude

Longitude

29207

354

The Quad, 3700 Spruce St.

1260

Airport Shuttle

39.95098

-75.1975

448274

409

Pennsylvania Hospotal

1303

AM Intern Service Area

39.94561

-75.1549

284476

1

3401 Grays Ferry Ave

1044

AM Vans

39.94244

-75.2003

29255

147

Food Court, 3409 Walnut St.

865

Campus Loop

39.95292

-75.1926

29257

148

Bookstore, 3601 Walnut St

865

Campus Loop

39.95322

-75.1951

29184

149

Pottruck Center, 3701 Walnut St

865

Campus Loop

39.95354

-75.1977

29198

150

Schattner Center, 240 S 40th St.

865

Campus Loop

39.95245

-75.203

29204

151

Rosenthal Building, 3800 Spruce St

865

Campus Loop

39.95123

-75.1995

29207

152

The Quad, 3700 Spruce St.

865

Campus Loop

39.95098

-75.1975

29210

153

Gates, 3420 Spruce St

865

Campus Loop

39.95044

-75.1936

29217

154

DRL, 200 S 33rd St.

865

Campus Loop

39.95192

-75.1901

318318

173

Penn Park Stop at Levy Tennis Pavilion

865

Campus Loop

39.95074

-75.1873

284476

360

3401 Grays Ferry Ave

1265

Charter

39.94244

-75.2003

145677

77

Boathouse

516

CREW

39.96964

-75.1847

29217

124

DRL, 200 S 33rd St.

516

CREW

39.95192

-75.1901

149379

79

38th & Locust

516

CREW

39.95255

-75.1987

447184

408

20 mkt

1300

East Boundry

39.95375

-75.173

29255

28

Food Court, 3409 Walnut St.

291

East Shuttle Route

39.95292

-75.1926

29257

29

Bookstore, 3601 Walnut St

291

East Shuttle Route

39.95322

-75.1951

29184

30

Pottruck Center, 3701 Walnut St

291

East Shuttle Route

39.95354

-75.1977

29198

31

Schattner Center, 240 S 40th St.

291

East Shuttle Route

39.95245

-75.203

29204

417

Rosenthal Building, 3800 Spruce St

291

East Shuttle Route

39.95123

-75.1995

29207

418

The Quad, 3700 Spruce St.

291

East Shuttle Route

39.95098

-75.1975

29210

419

Gates, 3420 Spruce St

291

East Shuttle Route

39.95044

-75.1936

29217

226

DRL, 200 S 33rd St.

291

East Shuttle Route

39.95192

-75.1901

29255

423

Food Court, 3409 Walnut St.

1423

East Shuttle Route(move in/out)

39.95292

-75.1926

29257

424

Bookstore, 3601 Walnut St

1423

East Shuttle Route(move in/out)

39.95322

-75.1951

29184

425

Pottruck Center, 3701 Walnut St

1423

East Shuttle Route(move in/out)

39.95354

-75.1977

29198

426

Schattner Center, 240 S 40th St.

1423

East Shuttle Route(move in/out)

39.95245

-75.203

29217

427

DRL, 200 S 33rd St.

1423

East Shuttle Route(move in/out)

39.95192

-75.1901

487182

435

Penn Mail Services

1437

Mail Route Blue

39.95207

-75.1872

487183

436

USPS

1437

Mail Route Blue

39.95168

-75.1841

487184

437

USPS

1437

Mail Route Blue

39.95317

-75.1838

438790

395

UNIVERSITY CITY TRAIN STATION

1281

MEDICAL PARK & RIDE

39.94803

-75.1905

29217

396

DRL, 200 S 33rd St.

1281

MEDICAL PARK & RIDE

39.95192

-75.1901

29210

397

Gates, 3420 Spruce St

1281

MEDICAL PARK & RIDE

39.95044

-75.1936

438792

398

CHOP

1281

MEDICAL PARK & RIDE

39.9487

-75.193

284476

126

3401 Grays Ferry Ave

419

PAT Vans

39.94244

-75.2003

438793

392

Grays Ferry

1280

Penn Park & Ride Circulator

39.9413

-75.1992

438790

379

UNIVERSITY CITY TRAIN STATION

1280

Penn Park & Ride Circulator

39.94803

-75.1905

29217

380

DRL, 200 S 33rd St.

1280

Penn Park & Ride Circulator

39.95192

-75.1901

438799

394

34th & Market

1280

Penn Park & Ride Circulator

39.95568

-75.1914

29255

381

Food Court, 3409 Walnut St.

1280

Penn Park & Ride Circulator

39.95292

-75.1926

29257

382

Bookstore, 3601 Walnut St

1280

Penn Park & Ride Circulator

39.95322

-75.1951

29184

383

Pottruck Center, 3701 Walnut St

1280

Penn Park & Ride Circulator

39.95354

-75.1977

312377

384

40th & Walnut

1280

Penn Park & Ride Circulator

39.95411

-75.2024

438791

385

Parking Garage 40

1280

Penn Park & Ride Circulator

39.95439

-75.2051

206681

386

UPPD, 4040 Chestnut St.

1280

Penn Park & Ride Circulator

39.9557

-75.204

29198

387

Schattner Center, 240 S 40th St.

1280

Penn Park & Ride Circulator

39.95245

-75.203

29204

388

Rosenthal Building, 3800 Spruce St

1280

Penn Park & Ride Circulator

39.95123

-75.1995

29207

389

The Quad, 3700 Spruce St.

1280

Penn Park & Ride Circulator

39.95098

-75.1975

29210

390

Gates, 3420 Spruce St

1280

Penn Park & Ride Circulator

39.95044

-75.1936

438792

391

CHOP

1280

Penn Park & Ride Circulator

39.9487

-75.193

438794

393

South Bank

1280

Penn Park & Ride Circulator

39.94115

-75.1989

29255

1

Food Court, 3409 Walnut St.

229

PennBUS East

39.95292

-75.1926

29257

2

Bookstore, 3601 Walnut St

229

PennBUS East

39.95322

-75.1951

29184

3

Pottruck Center, 3701 Walnut St

229

PennBUS East

39.95354

-75.1977

29198

4

Schattner Center, 240 S 40th St.

229

PennBUS East

39.95245

-75.203

286316

139

Rosenthal Bldg (Vet School)

229

PennBUS East

39.95123

-75.1995

29207

6

The Quad, 3700 Spruce St.

229

PennBUS East

39.95098

-75.1975

29210

7

Gates, 3420 Spruce St

229

PennBUS East

39.95044

-75.1936

29217

8

DRL, 200 S 33rd St.

229

PennBUS East

39.95192

-75.1901

331509

174

23rd & Chestnut

229

PennBUS East

39.95258

-75.1782

286375

175

23rd & Walnut St.

229

PennBUS East

39.95114

-75.1786

331510

176

23rd & Locust

229

PennBUS East

39.95003

-75.1788

331511

177

23rd & Spruce

229

PennBUS East

39.9488

-75.1791

331512

178

23rd & Pine

229

PennBUS East

39.94738

-75.1794

331513

179

23rd & Lombard

229

PennBUS East

39.94648

-75.1796

331515

180

22nd & South

229

PennBUS East

39.9452

-75.1787

331516

181

21st & South

229

PennBUS East

39.94503

-75.1771

331517

182

20th & South

229

PennBUS East

39.94477

-75.1752

331518

183

20th & Lombard

229

PennBUS East

39.94572

-75.1748

331519

184

20th & Pine

229

PennBUS East

39.94663

-75.1746

331520

185

20th & Spruce

229

PennBUS East

39.94808

-75.1743

29244

128

20th & Locust St

229

PennBUS East

39.94938

-75.174

331522

186

21st & Walnut

229

PennBUS East

39.95077

-75.1756

331523

187

22nd & Walnut

229

PennBUS East

39.95097

-75.1771

29255

343

Food Court, 3409 Walnut St.

1258

PennBus East (move in/out)

39.95292

-75.1926

29257

344

Bookstore, 3601 Walnut St

1258

PennBus East (move in/out)

39.95322

-75.1951

29184

345

Pottruck Center, 3701 Walnut St

1258

PennBus East (move in/out)

39.95354

-75.1977

29198

346

Schattner Center, 240 S 40th St.

1258

PennBus East (move in/out)

39.95245

-75.203

29217

348

DRL, 200 S 33rd St.

1258

PennBus East (move in/out)

39.95192

-75.1901

29255

335

Food Court, 3409 Walnut St.

1257

PennBus East 20th Street Detour Route

39.95292

-75.1926

29257

336

Bookstore, 3601 Walnut St

1257

PennBus East 20th Street Detour Route

39.95322

-75.1951

29184

337

Pottruck Center, 3701 Walnut St

1257

PennBus East 20th Street Detour Route

39.95354

-75.1977

29198

338

Schattner Center, 240 S 40th St.

1257

PennBus East 20th Street Detour Route

39.95245

-75.203

29204

339

Rosenthal Building, 3800 Spruce St

1257

PennBus East 20th Street Detour Route

39.95123

-75.1995

29207

340

The Quad, 3700 Spruce St.

1257

PennBus East 20th Street Detour Route

39.95098

-75.1975

29210

341

Gates, 3420 Spruce St

1257

PennBus East 20th Street Detour Route

39.95044

-75.1936

29217

342

DRL, 200 S 33rd St.

1257

PennBus East 20th Street Detour Route

39.95192

-75.1901

29255

326

Food Court, 3409 Walnut St.

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95292

-75.1926

29257

327

Bookstore, 3601 Walnut St

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95322

-75.1951

29184

328

Pottruck Center, 3701 Walnut St

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95354

-75.1977

29198

329

Schattner Center, 240 S 40th St.

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95245

-75.203

29204

330

Rosenthal Building, 3800 Spruce St

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95123

-75.1995

29207

331

The Quad, 3700 Spruce St.

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95098

-75.1975

29210

332

Gates, 3420 Spruce St

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95044

-75.1936

29217

333

DRL, 200 S 33rd St.

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.95192

-75.1901

29244

334

20th & Locust St

1256

PennBus East 23rd Street/Chestnut Street Closure Route

39.94938

-75.174

29207

11

The Quad, 3700 Spruce St.

230

PennBUS West

39.95098

-75.1975

29210

12

Gates, 3420 Spruce St

230

PennBUS West

39.95044

-75.1936

29217

13

DRL, 200 S 33rd St.

230

PennBUS West

39.95192

-75.1901

29255

14

Food Court, 3409 Walnut St.

230

PennBUS West

39.95292

-75.1926

29257

15

Bookstore, 3601 Walnut St

230

PennBUS West

39.95322

-75.1951

29184

16

Pottruck Center, 3701 Walnut St

230

PennBUS West

39.95354

-75.1977

29198

17

Schattner Center, 240 S 40th St.

230

PennBUS West

39.95245

-75.203

331552

188

41st & Spruce

230

PennBUS West

39.95212

-75.2055

331553

189

42nd & Spruce

230

PennBUS West

39.95229

-75.2069

331554

190

42nd & Pine

230

PennBUS West

39.95125

-75.2071

331555

191

42nd & Baltimore

230

PennBUS West

39.94989

-75.2072

331556

192

43rd & Baltimore

230

PennBUS West

39.94961

-75.2092

331557

193

44th & Baltimore

230

PennBUS West

39.94929

-75.2111

331559

194

45th & Springfield

230

PennBUS West

39.94887

-75.2125

331560

195

46th & Springfield

230

PennBUS West

39.94799

-75.2139

331561

196

47th & Springfield

230

PennBUS West

39.94709

-75.2151

331562

197

48th & Springfield

230

PennBUS West

39.94613

-75.2165

331563

198

48th & Warrington

230

PennBUS West

39.94729

-75.2179

286288

129

48th & Baltimore Ave.

230

PennBUS West

39.94837

-75.2192

331564

199

48th & Cedar

230

PennBUS West

39.94947

-75.219

331565

200

48th & Hazel

230

PennBUS West

39.9503

-75.2188

331566

201

48th & Larchwood

230

PennBUS West

39.95102

-75.2186

331567

202

48th & Osage

230

PennBUS West

39.95178

-75.2185

143615

203

48th & Pine St.

230

PennBUS West

39.95251

-75.2183

331568

204

48th & Spruce

230

PennBUS West

39.95359

-75.2181

331569

205

47th & Spruce

230

PennBUS West

39.95336

-75.2161

331570

206

46th & Spruce

230

PennBUS West

39.95313

-75.2142

331571

207

45th & Spruce

230

PennBUS West

39.95286

-75.2122

331572

208

44th & Spruce

230

PennBUS West

39.95268

-75.2106

331573

209

43rd & Spruce

230

PennBUS West

39.9525

-75.2092

29204

210

Rosenthal Building, 3800 Spruce St

230

PennBUS West

39.95123

-75.1995

29204

361

Rosenthal Building, 3800 Spruce St

1278

PennBus West (DRL Closure Route)

39.95123

-75.1995

29255

362

Food Court, 3409 Walnut St.

1278

PennBus West (DRL Closure Route)

39.95292

-75.1926

29257

363

Bookstore, 3601 Walnut St

1278

PennBus West (DRL Closure Route)

39.95322

-75.1951

29184

364

Pottruck Center, 3701 Walnut St

1278

PennBus West (DRL Closure Route)

39.95354

-75.1977

29198

365

Schattner Center, 240 S 40th St.

1278

PennBus West (DRL Closure Route)

39.95245

-75.203

29217

110

DRL, 200 S 33rd St.

680

PennBus West (move-in/out)

39.95192

-75.1901

29255

111

Food Court, 3409 Walnut St.

680

PennBus West (move-in/out)

39.95292

-75.1926

29257

112

Bookstore, 3601 Walnut St

680

PennBus West (move-in/out)

39.95322

-75.1951

29184

113

Pottruck Center, 3701 Walnut St

680

PennBus West (move-in/out)

39.95354

-75.1977

29198

114

Schattner Center, 240 S 40th St.

680

PennBus West (move-in/out)

39.95245

-75.203

29204

318

Rosenthal Building, 3800 Spruce St

1244

PennBus West (Springfield Ave Closure)

39.95123

-75.1995

29207

319

The Quad, 3700 Spruce St.

1244

PennBus West (Springfield Ave Closure)

39.95098

-75.1975

29210

320

Gates, 3420 Spruce St

1244

PennBus West (Springfield Ave Closure)

39.95044

-75.1936

29217

321

DRL, 200 S 33rd St.

1244

PennBus West (Springfield Ave Closure)

39.95192

-75.1901

29255

322

Food Court, 3409 Walnut St.

1244

PennBus West (Springfield Ave Closure)

39.95292

-75.1926

29257

323

Bookstore, 3601 Walnut St

1244

PennBus West (Springfield Ave Closure)

39.95322

-75.1951

29184

324

Pottruck Center, 3701 Walnut St

1244

PennBus West (Springfield Ave Closure)

39.95354

-75.1977

29198

325

Schattner Center, 240 S 40th St.

1244

PennBus West (Springfield Ave Closure)

39.95245

-75.203

284476

410

3401 Grays Ferry Ave

1305

PTS Dropoff Boundaries

39.94244

-75.2003

29217

279

DRL, 200 S 33rd St.

1184

West A/B Route

39.95192

-75.1901

29255

280

Food Court, 3409 Walnut St.

1184

West A/B Route

39.95292

-75.1926

29257

281

Bookstore, 3601 Walnut St

1184

West A/B Route

39.95322

-75.1951

29184

282

Pottruck Center, 3701 Walnut St

1184

West A/B Route

39.95354

-75.1977

312377

283

40th & Walnut

1184

West A/B Route

39.95411

-75.2024

29198

284

Schattner Center, 240 S 40th St.

1184

West A/B Route

39.95245

-75.203

29204

285

Rosenthal Building, 3800 Spruce St

1184

West A/B Route

39.95123

-75.1995

29207

286

The Quad, 3700 Spruce St.

1184

West A/B Route

39.95098

-75.1975

29210

287

Gates, 3420 Spruce St

1184

West A/B Route

39.95044

-75.1936

41150

288

Johnson Pavilion

1184

West A/B Route

39.94932

-75.1961

29217

416

DRL, 200 S 33rd St.

289

West Shuttle Route (A)

39.95192

-75.1901

29255

19

Food Court, 3409 Walnut St.

289

West Shuttle Route (A)

39.95292

-75.1926

29257

20

Bookstore, 3601 Walnut St

289

West Shuttle Route (A)

39.95322

-75.1951

29184

21

Pottruck Center, 3701 Walnut St

289

West Shuttle Route (A)

39.95354

-75.1977

433599

428

Fresh Grocer

1424

West Shuttle Route (B move in/out))

39.95442

-75.2026

29198

429

Schattner Center, 240 S 40th St.

1424

West Shuttle Route (B move in/out))

39.95245

-75.203

41150

430

Johnson Pavilion

1424

West Shuttle Route (B move in/out))

39.94932

-75.1961

433599

350

Fresh Grocer

290

West Shuttle Route (B)

39.95442

-75.2026

29198

23

Schattner Center, 240 S 40th St.

290

West Shuttle Route (B)

39.95245

-75.203

286316

420

Rosenthal Bldg (Vet School)

290

West Shuttle Route (B)

39.95123

-75.1995

29207

421

The Quad, 3700 Spruce St.

290

West Shuttle Route (B)

39.95098

-75.1975

29210

422

Gates, 3420 Spruce St

290

West Shuttle Route (B)

39.95044

-75.1936

486404

434

Johnson Pavilion

290

West Shuttle Route (B)

39.94949

-75.196

284476

127

3401 Grays Ferry Ave

407

X Vans

39.94244

-75.2003

337280

211

West Stand by Area

407

X Vans

39.94831

-75.206

337281

212

North Stand by Area

407

X Vans

39.95929

-75.1976

337282

213

East Stand by Area

407

X Vans

39.95037

-75.1913

337283

214

South Stand by Area

407

X Vans

39.9481

-75.1985

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