Deserializing Nested JSON API response with Django - json
I'm pretty new to the DRF and serializing/deserializing. I'm slowly building a dashboard for my business during the corona virus and learning to code. I am in a little deep, but after spending more than $10k on developers on upwork and not really get much result, I figured, what do I have to lose?
Our software provider has a full API for our needs https://developer.myvr.com/api/, but absolutely no dashboard to report statistics about our clients reservation data.
The end result will be a synchronization of some of the data from their API to my database which will be hosted through AWS. I chose to do it this way due to having to do some post processing of data from the API. For example, we need to calculate occupancy rates(which is not an endpoint), expenses from our accounting connection and a few other small calculations in which the data is not already in the provided API. I originally wanted to use the data from the API solely, but I'm hesitant due to the reasons above.
That's the backstory, here are the questions:
The API response is extremely complex and nested multiple times, what is the best practise to extract a replication of the structure of the data to my own Database? Would I have to create models for each field manually?
Example response:
```{
"uri": "https://api.myvr.com/v1/properties/b6b0f2fe278f612b/",
"id": "b6b0f2fe278f612b",
"key": "b6b0f2fe278f612b",
"accessDescription": null,
"accommodates": 11,
"active": false,
"addressOne": "11496 Zermatt Dr",
"addressTwo": null,
"allowTurns": true,
"amenities": "https://api.myvr.com/v1/property-amenities/?propertyId=b6b0f2fe278f612b",
"automaticallyApprove": false,
"baseNightlyRate": "395.00",
"baseRate": {
"uri": "https://api.myvr.com/v1/rates/660c299d4785c32e/",
"id": "660c299d4785c32e",
"key": "660c299d4785c32e",
"externalId": null,
"baseRate": true,
"changeoverDay": null,
"created": "2019-01-19T08:02:36Z",
"currency": "USD",
"endDate": "2020-01-18",
"minStay": 3,
"modified": "2019-01-19T08:02:36Z",
"monthly": 0,
"name": "Base Rate",
"weekNight": 39500,
"nightly": 39500,
"position": 0,
"property": {
"name": "API Demo Property",
"uri": "https://api.myvr.com/v1/properties/b6b0f2fe278f612b/",
"id": "b6b0f2fe278f612b",
"externalId": null,
"key": "b6b0f2fe278f612b",
"slug": "api-demo-property"
},
"ratePlan": {
"uri": "https://api.myvr.com/v1/rate-plans/862caa3f5267602d/",
"key": "862caa3f5267602d",
"name": "Default Rates for Property"
},
"repeat": true,
"startDate": "2020-01-18",
"weekend": 0,
"weekendNight": 0,
"weekly": 250000
},
"bathrooms": "4.0",
"bedrooms": 4,
"bookingUrl": "https://myvr.com/reservation/redirect/booking/b6b0f2fe278f612b/",
"checkInTime": "16:00:00",
"checkOutTime": "10:00:00",
"city": "Truckee",
"commissionStructure": null,
"countryCode": "US",
"created": "2016-01-19T00:01:48Z",
"currency": "USD",
"customFields": {},
"description": "Luxurious living, scenic mountain setting, entertainment galore. Located on a quiet street in Tahoe Donner, our well equipped modern home is nestled into the wilderness. A babbling creek greets visitors approaching the front step as it collects into a small pond with a cascading waterfall. <br/>\n<br/>\nInside, over 3,000 sqft of luxurious living space divides itself between two floors. On the first floor, a beautiful kitchen with granite counters, gas stove and stainless steel appliances opens to a large great room centered around a wood burning fireplace and featuring 30' soaring ceilings. A spacious loft overlooks the great room, showcasing a large poker/card table. Upstairs features a large entertainment room, complete with wet bar, shuffleboard table, and state-of-the-art television setup with surround sound. The scenic backyard is accessible from a large deck featuring a new hot tub with seating for 7.",
"externalId": null,
"feePlan": {
"uri": "https://api.myvr.com/v1/fee-plans/4d1c44383755051b/",
"key": "4d1c44383755051b",
"name": "Default Fees for Listing"
},
"headline": "Beautiful Four Bedroom Lake Front Property",
"houseRules": null,
"instantBookingsEnabled": false,
"lat": "39.3422523000",
"level": "unit",
"localAreaDescription": "Tahoe Donner is a year round activity resort. The amenities include private beach/boat launching facilities, pools, recreation center, tennis, horseback riding, golf, downhill skiing as well as cross country skiing. Truckee is a historical mining town-having a western feel but also has museums, theaters, fine dining plus 2 large supermarkets-all less than 3 miles from the house. Our home is also located within a 15 minute drive to 4 major ski resorts. Downtown Reno is a short 40 minute drive away for those seeking a night on the town or the thrill of a Nevada casino.",
"lon": "-120.2271947000",
"lowestNightlyRate": "395.00",
"manual": "",
"modified": "2019-10-18T17:18:43Z",
"name": "API Demo Property",
"owner": null,
"postalCode": "96161",
"ratePlan": {
"uri": "https://api.myvr.com/v1/rate-plans/862caa3f5267602d/",
"key": "862caa3f5267602d",
"name": "Default Rates for Property"
},
"ratePlanLocked": false,
"region": "CA",
"shortCode": "API",
"size": 3000,
"slug": "api-demo-property",
"suitableElderly": "yes",
"suitableEvents": "unknown",
"suitableGroups": "yes",
"suitableHandicap": "no",
"suitableInfants": "unknown",
"suitableKids": "yes",
"suitablePets": "no",
"suitableSmoking": "no",
"transitDescription": null,
"type": "house",
"weekendNights": [
5,
6
]
}```
I think the best way to populate the database would be to run a custom management command to run a once off script, I've done this previously with another database, however I'm still stuck as I don't really want to write these models manually. Also a concern is if a field is missing or the structure changes.
This project is definitely above my skills and extremely ambitious, but I would appreciate any feedback or advice anyone might have.
Thanks,
Darren
So I didn't really get any interest in this question, but I ended up working it out myself.
I hope someone googles it and might find it helpful.
import requests
from rest_framework.response import Response
from django.core.management.base import BaseCommand, CommandError
from reservation.models import Reservation
import time
MYVR_URL = 'https://api.myvr.com/'
MYVR_RESERVATION = 'v1/reservations/?limit=100'
headers = {
'Authorization': 'Basic SOmeAPiCodeHeRe123=',
}
class Command(BaseCommand):
help = 'Imports new properties and saves the objects in the database'
def handle(self, *args, **options):
url = MYVR_URL + MYVR_RESERVATION
print("Populating Reservations")
def looping_api(url, headers):
while url:
r = requests.request("GET", url, headers=headers)
url = r.json().get('next')
props_data = r.json().get('results')
start_time = time.time()
for prop in props_data:
try:
created = Reservation.objects.update_or_create(
myvr_key=prop.get('key'),
adults=prop.get('adults'),
children=prop.get('children'),
checkin=prop.get('checkIn'),
checkout=prop.get('checkOut'),
checkinTime=prop.get('checkInTime'),
checkoutTime=prop.get('checkOutTime'),
guestFirstName=prop.get('firstName'),
dateCreated=prop.get('created'),
dateBooked=prop.get('dateBooked'),
dateCancelled=prop.get('dateCanceled'),
contact=prop.get('contact').get('name'),
contact_key=prop.get('contact').get('key'),
guest_type=prop.get('guestType'),
property_name=prop.get('property').get('name'),
property_key=prop.get('property').get('key'),
source_code=prop.get('source').get('code'),
source_name=prop.get('source').get('name'),
total_due=prop.get('quote').get('totalDue'),
total_refundables=prop.get(
'quote').get('totalRefundableFees'),
total_nonrefundables=prop.get(
'quote').get('totalNonrefundableFees'),
reference_id=prop.get('referenceId'),
)
print(
f"Added obj {prop.get('key')}")
except AttributeError as error:
print(f"{error} attribute is null or owner booking")
url = r.json().get('next')
print(r.json().get('next'))
print(len(props_data))
end_time = time.time()
duration = (end_time - start_time)
print(duration)
looping_api(url, headers)
Related
How to extract MetaData from Bim 360 Plans?
I can see a table of results under Bim 360 Plans which includes a fields like Name, Title, Set, Version, LastUpdated, UpdatedBy. See screenshot below: BIM 360 Plans However I cannot get all the fields from the API. Title, Set and Version are missing. "attributes": { "displayName": "A101 - Site Plan", "createTime": "2021-10-15T14:38:17.0000000Z", "createUserId": "P49WLFCASZNJ", "createUserName": "Walker Lockard", "lastModifiedTime": "2021-10-15T14:38:17.0000000Z", "lastModifiedUserId": "P49WLFCASZNJ", "lastModifiedUserName": "Walker Lockard", "hidden": false, "reserved": false, Question: Which API do I use to extract the Bim 360 Plans Data and do you have an example CURL for that to extract Title, Set and Version?
Sorry, the information you provided is limited. From my test, you will need to find the versionNumber from its version tip, which type is versions. like the below. The snippet your share is an item that type is items. { "type": "versions", "id": "urn:adsk.wipprod:fs.file:vf.34Xvlw1jTcSQ_XkIVh07cg?version=2", "attributes": { "name": "3 Appr. Date I ita Extraction And Multileaders Samole ■", "displayName": "3 Appr. Date I ita Extraction And Multileaders Samole ■", "createTime": "2018-12-11T08:04:08.0000000Z", "createUserId": "", "createUserName": "", "lastModifiedTime": "2020-12-23T07:38:03.0000000Z", "lastModifiedUserName": "Eason Kang", "versionNumber": 2, // ... Unfortunately, there is no API that supports getting Sets and title at this moment. We apologize for the inconveniences.
Save JSON file in SQL Server
Nested JSON file save SQL Server as one record. How to design hierarchy model in one table? { "SSAAResponse": { "TheCTerRegRequest": { "ParentCompanyRegOrgE": "", "StartMonth": 1, "TheCTerRegRequestNoticesList": [ { "CreateDateTime": "1397/11/02-12:09", "NoticeType": 6, "RequestNoticeText": "Language Journal offers 6 or 7 essays or research studies per quarterly issue, a professional calendar of events and news, a listing of relevant articles in other journals, an annual survey of doctoral degrees in all areas concerning foreign and second languages, and reviews of scholarly books, textbooks, videotapes, and software." }, { "CreateDateTime": "1397/11/01-10:36", "NoticeType": 10, "RequestNoticeText": "c version of The Modern Language Journal is available at" }, { "CreateDateTime": "1397/10/29-09:18", "NoticeType": 8, "RequestNoticeText": "A board of directors for a company composed entirely of one gender or race Before Civil Rights laws, public schools in the South admitted only white studentsشاه" } ], "TheReceiveUnit": { "UnitName": "Strategies That", "State": 1, "Code": "16519" }, "TheCTerRegRequestNamesList": [ { "Name": "Corp 1", "status": 2, "Seqnumber": 4 }, { "Name": "Corp 2", "status": 2, "Seqnumber": 5 }, { "Name": "Corp 3", "status": 2, "Seqnumber": 3 }, { "Name": "Corp 4", "status": 4, "Seqnumber": 1 }, { "Name": "Corp 5", "status": 2, "Seqnumber": 2 } ], "TheCTerRegRequestNewspaperList": [ { "TheGNewspaper": { "State": 2, "Code": "0352", "Title": "آواي کرمانشاه" } } ], "ApplicantNationalCode": "3240953501", "SignBookMobileNumber4SMS": "", "TheCTerRegRequestStocksList": [], "FounderMember": "", "CapitalDescription": "", "TheCTerRegRequestDefectsList": [], "MinuteStartTime": "12:00", "DirectMemberMinuteDate": "1397/10/25", "MinuteDate": "1397/10/25", "ParentCompanyPublicNumber": "", "Declaration": "programs delivering customized professional development. A former master teacher, she has been in education for more than 25 years and works with administrators and teachers in groups of varying sizes from kindergarten through high school. She is the author of Complex Text Decoded: ", "EmaiLAddress": "", "OwnerShipType": 1, "CreateDateTime": "1397/10/26-11:33", "SignBookFamily": "مژگاني", "ParentCompanyRegOrg": "", "TheCTerRegRequestRejectReasonsList": [ { "RejectDesc": "Kathy Glass consults nationally with schools and districts, presents at conferences, and teaches seminars for university and county", "RejectDateTime": "1397/11/02-11:58", "TheCIMinutesRejectType": { "State": 1, "Code": "004", "Title": "Kathy Glass consults nationally with schools and districts, presents at conferences, and teaches seminars for university and county" } } ], "TotalCapital": 1000000, "SignBookLawyerState": 1, "ApplicantFirstName": "کسري", "AfterRegNationalCode": "", "InvitationLetterNumber": "", "TheCIInstitutionType": {}, "DirectorMember": "", "TheCTerRegRequestPersonList": [ { "CapitalStatus": 2, "FirstNameFA": "mostafa", "LastNameFA": "sholeh", "FatherNameLA": "", "PhoneNumber": "083-37225212", "RecordNo": "", "FirstNameLA": "", "MobileNumber4SMS": "09904040946", "TheCTerRegRequestPersonStocksList": [ { "AmountStocks": 500000, "TheCISharesType": { "State": 1, "Code": "005", "Title": "cash" } } ], "BirthDateSH": "1371/11/05", "PersonType": 1, "PostCode": "6713945936", "Address": "3634 N Fm 2869, Winnsboro, TX, 75494 ", "FatherNameFA": "amir", "TheCICompanyType": {}, "NationalityCode": "3240953501", "ExternalNationalStatus": 1, "LastNameLA": "", "IdentityNo": "3240953501", "TheCTerRegRequestPersonPostsList": [ { "EndDateValidity": "1398/10/25", "Description": "", "TheCIPostType": { "State": 1, "Code": "004", "Title": "Director" }, "StartDate": "1397/10/25", "IsNonPartnership": 2, "PeriodTime": 1, "PostTitle": "", "IsNonDirectMember": 2 }, { "EndDateValidity": "1398/10/25", "Description": "", "TheCIPostType": { "State": 1, "Code": "001", "Title": "Boss" }, "StartDate": "1397/10/25", "IsNonPartnership": 2, "PeriodTime": 1, "PostTitle": "", "IsNonDirectMember": 2 } ], "Sex": 2 }, { "CapitalStatus": 2, "FirstNameFA": "mahdi", "LastNameFA": "salefdkjf", "FatherNameLA": "", "PhoneNumber": "083-37225212", "RecordNo": "", "FirstNameLA": "", "MobileNumber4SMS": "09189954983", "TheCTerRegRequestPersonStocksList": [ { "AmountStocks": 500000, "TheCISharesType": { "State": 1, "Code": "005", "Title": "cash" } } ], "BirthDateSH": "1370/11/23", "PersonType": 1, "PostCode": "6713945936", "Address": "3634 N Fm 2869, Winnsboro, TX, 75494 ", "FatherNameFA": "mohamad", "TheCICompanyType": {}, "NationalityCode": "3240739070", "ExternalNationalStatus": 1, "LastNameLA": "", "IdentityNo": "3240739070", "TheCTerRegRequestPersonPostsList": [ { "EndDateValidity": "1398/10/25", "Description": "", "TheCIPostType": { "State": 1, "Code": "045", "Title": "ghaem magham" }, "StartDate": "1397/10/25", "IsNonPartnership": 2, "PeriodTime": 1, "PostTitle": "", "IsNonDirectMember": 2 }, { "EndDateValidity": "1398/10/25", "Description": "", "TheCIPostType": { "State": 1, "Code": "002", "Title": "boss heyat" }, "StartDate": "1397/10/25", "IsNonPartnership": 2, "PeriodTime": 1, "PostTitle": "", "IsNonDirectMember": 2 } ], "Sex": 2 } ], "ApplicantLastNameEn": "", "ActivityTimeState": 2, "TheObjectState": { "StateType": 2, "Code": "001126", "Title": "تadmin" }, "SignBookDate": "", "WebAddress": "", "FaxNumber": "", "AfterRegRegisterDate": "", "CashCapital": 1000000, "RequestNoticeText": "Interest in the relations between discourse and (social) context has been limited mostly to sociolinguistics (Ammon, 2005) and Critical Discourse Analysis (CDA)(Wodak, & Meyer, 2001). In these approaches, a more or less direct link is established between social structures (for instance conceptualized as social ‘variables’ such as gender, class or age in", "SignBookFamilyEn": "", "ParentCompanyRegisterDateM": "", "Turn": 1, "TheCTerRegRequestPledgedCapitalList": [], "SignatureAuthorityDesc": "mostafa sholeh", "ApplicantLastName": "sholeh", "LicenseState": 1, "ParentCompanyAddress": "", "AfterRegName": "", "ParentCompanyName": "", "TheCTerRegRequestActivitiesList": [ { "ActivityDesc": "Teaching this skill supports self-agency so students can define unfamiliar words independently" } ], "ParentCompanyRegisterDate": "", "ParentCountryStatuteE": "", "ApplicantNationalityType": 1, "PostCode": "6713945936", "ParentCompanyType": "", "ParentCompanyLetterDate": "", "ParentCompanyCurrency": "", "RequestReceipt": "A refereed publication, The Modern Language Journal is dedicated to promoting scholarly exchange among teachers and researchers of all modern foreign languages and English as a second language. This journal publishes documented essays, quantitative and qualitative research studies, response articles, and editorials that challenge paradigms of language learning and teaching. The Modern Language Journal offers 6 or 7 essays or research studies per quarterly issue, a professional calendar of events and news, a listing of relevant articles in other journals, an annual survey of doctoral degrees in all areas concerning foreign and second languages, and reviews of scholarly books, textbooks, videotapes, and software. JSTOR provides a digital archive of the print version of The Modern Language Journal. The electronic version of The Modern Language Journal is available at http://www.interscience.wiley.com. Authorized users may be able to access the full text articles at this site. The Modern Language Journal also offers a fifth issue each year which alternates between a Focus Issue and a Monograph.", "SignBookNationalityType": 1, "CompanyLetter": "Wiley is a global provider of content and content-enabled workflow solutions in areas of scientific, technical, medical, and scholarly research; professional development; and education. Our core businesses produce scientific, technical, medical, and scholarly journals, reference works, books, database services, and advertising; professional books, subscription products, certification and training services and online applications; and education content and services including integrated online teaching and learning resources for undergraduate and graduate students and lifelong learners. Founded in 1807, John Wiley & Sons, Inc. has been a valued source of information and understanding for more than 200 years, helping people around the world meet their needs and fulfill their aspirations. Wiley has published the works of more than 450 Nobel laureates in all categories: Literature, Economics, Physiology or Medicine, Physics, Chemistry, and Peace. Wiley has partnerships with many of the world’s leading societies and publishes over 1,500 peer-reviewed journals and 1,500+ new books annually in print and online, as well as databases, major reference works and laboratory protocols in STMS subjects. With a growing open access offering, Wiley is committed to the widest possible dissemination of and access to the content we publish and supports all sustainable models of access. Our online platform, Wiley Online Library (wileyonlinelibrary.com) is one of the world’s most extensive multidisciplinary collections of online resources, covering life, health, social and physical sciences, and humanities.", "PresenceDate": "", "ApplicantPost": 1, "SignBookNationalCode": "3240953501", "SignBookPost": 1, "SignBookLicenseDate": "", "MinuteText": "umented essays, quantitative and qualitative research studies, response articles, and editorials that challenge paradigms of language learning and teaching. The Modern Language Journal offers 6 or 7 essays or research studies per quarterly issue, a professional calendar of events and news, a listing of relevant articles in other journals, an annual survey of doctoral degrees in all areas concerning foreign and second languages, and reviews of scholarly books, textbooks, videotapes, and software. JSTOR provides a digital archive of the print version of The Modern Language Journal. The electronic version of The Modern Language Journal is available at http://www.interscience.wiley.com. Authorized users may b", "InvitationSessionTime": "", "DirectMemberMinuteStartTime": "12:00", "ParentCompanyLetterNumber": "", "Statute": "Because youngsters with reading disabilities typically have problems involving poor phonological skills, they generally benefit from instructional approaches that provide highly explicit, systematic teaching of phonemic awareness and phonics. However, if children are taught systematic phonics in one part of the reading program but are encouraged to use context to guess at words when reading passages, they may not apply their phonics skills consistently. Thus, the phonics component of the reading program may be seriously undermined. Also, children must be placed for reading instruction in books that are a good match to their word identification accuracy and phonics skills. If they are placed in reading materials that are too difficult for their current skill levels, they may be left with few options other than guessing at words. However, like normally-achieving readers, children with reading disabilities do benefit from encouragement to use context as an aid to comprehension. This kind of context use can occur when children are listening to text as well as when they are reading. For instance, in reading stories to children, teachers can encourage the use of sentence context or pictures to determine the meanings of unfamiliar words by modeling this process aloud: "Hmmm, what can I do if I am not sure what the word pale means? Well, the sentence says that D. W. put baby powder on her face to look pale, so I can think about what baby powder looks like…" Because youngsters with reading disabilities usually have listening comprehension that far outstrips their reading skills, oral comprehension activities often are the best ways to challenge and develop their comprehension abilities.", "TheCTerRegRequestLicenseList": [], "ApplicantBirthDate": "", "AddressDesc": "he use of context in comprehension refers to something quite different from the use of context in word identification. Returning to the previous sentence about D.W.", "FinancialCalenderType": 1, "ApplicantFirstNameEn": "", "DirectMemberMinuteText": "Black? Book? Box? (The guesses are often accompanied by more attention to the expression on the face of the teacher than to the print, as the child waits for this expression to change to indicate a correct guess.) Even when children are able to use context to arrive at the correct word, reliance on context to compensate for inaccurate or nonautomatic word reading creates a drain on comprehension. This kind of compensation becomes increasingly problematic as children are expected to read more challenging texts that have few or no pictures, sophisticated vocabulary, and grammatically complex sentences.", "ParentCompanyNameE": "", "NumOfDirectMember": 2, "SignBookLicenseNo": "", "FixPhoneNumber": "083-37225212", "TheCTerRegRequestAdvertisingList": [], "Authority": "", "TheCICompanyType": { "State": 1, "Code": "001", "Title": "Corp limited" }, "SignBookBirthDate": "", "SignBookNameEn": "", "StartDay": 1, "ActivityEndDate": "", "SignBookName": "hamid", "AccessNo": "3694361110607356378", "ParentCountryStatute": "", "TheCTerRegRequestBranchList": [], "TheCTerRegRequestStatuteList": [ { "Description": "phonics skills to decode occasional unknown words rapidly.", "Clause": 0, "Note": 0, "Article": 2 }, { "Description": "systems" to read words. Skilled readers do not need to rely on pictures or sentence context in word identification, because they can read most words automatically", "Clause": 0, "Note": 0, "Article": 3 }, { "Description": "increasingly accurate and automatic word identification skills, ", "Clause": 0, "Note": 1, "Article": 3 }, { "Description": "Scientific evidence strongly demonstrates that the development of skilled reading involves", "Clause": 0, "Note": 0, "Article": 4 }, { "Description": "When children encounter an unfamiliar word in reading, they may make use of context cues, that is, information from pictures or from sentences surrounding the unknown word.", "Clause": 0, "Note": 0, "Article": 5 }, { "Description": "monitor their reading to see if it was accurate", "Clause": 0, "Note": 0, "Article": 6 }, { "Description": "select the information that they need to focus on", "Clause": 0, "Note": 0, "Article": 7 }, { "Description": "Unfortunately for many students, choosing effective strategies does not come automatically. Often, students who have difficulty reading simply browse or skim through texts without a specific strategy in mind because they don’t have a clear reason for reading. ", "Clause": 0, "Note": 0, "Article": 8 }, { "Description": "For example, a situation that involves understanding and recalling details requires a different set of strategies from a situation where the reader is seeking specific information but memorization is not necessary.", "Clause": 0, "Note": 1, "Article": 8 }, { "Description": "Some students will do leisure reading because they are interested in a particular topic.", "Clause": 0, "Note": 0, "Article": 9 }, { "Description": " In fact, students may read a variety of texts for enjoyment: newspapers or magazines", "Clause": 0, "Note": 0, "Article": 10 }, { "Description": "Functional reading is what students will need to do all the time to get things done at school, at work and in their everyday lives. ", "Clause": 0, "Note": 0, "Article": 11 }, { "Description": "It may seem that only functional reading is important,", "Clause": 0, "Note": 0, "Article": 12 }, { "Description": "Students can learn to recognize contexts of reading and choose appropriate strategies through teacher-guided practice and reflection on the reading they do in various situations for various purposes.", "Clause": 0, "Note": 0, "Article": 13 }, { "Description": "Unfortunately for many students, choosing effective strategies does not come automatically. ", "Clause": 0, "Note": 0, "Article": 14 }, { "Description": "Teaching students about contexts of reading will help them be more confident and strategic in their reading", "Clause": 0, "Note": 0, "Article": 15 }, { "Description": "Contexts of reading are all the elements that influence how we read in different situations. The context includes: 1) the setting, 2) the text, and 3) the purpose for reading. There are two main types of reading contexts. In leisure contexts we choose to read for our own interest, pleasure or entertainment..", "Clause": 0, "Note": 0, "Article": 16 }, { "Description": "i am a teacher", "Clause": 0, "Note": 0, "Article": 17 }, { "Description": "i am a student", "Clause": 0, "Note": 0, "Article": 18 }, { "Description": "i am a student", "Clause": 0, "Note": 0, "Article": 19 }, { "Description": "asds was a replace", "Clause": 0, "Note": 0, "Article": 20 }, { "Description": "fghqwr hgfiqehk ewrjgfoqhg krjg", "Clause": 0, "Note": 0, "Article": 21 }, { "Description": "lkrdhgkhkhkfdg rtgerg wt, "Clause": 0, "Note": 0, "Article": 22 }, { "Description": "dgwejrfgjwegfk rgjwle ertehrgho", "Clause": 0, "Note": 0, "Article": 23 }, { "Description": "erewktlkrewhjgkw rkgjwgjkl", "Clause": 0, "Note": 0, "Article": 24 }, { "Description": "safddf dkjhaskjfgjka eirhweyhi", "Clause": 0, "Note": 0, "Article": 25 }, { "Description": "Test", "Clause": 0, "Note": 0, "Article": 26 }, { "Description": "test", "Clause": 0, "Note": 0, "Article": 1 } ], "ApplicantMobileNumber4SMS": "09904040946", "FinalAcceptanceDate": "1397/10/27", "Name": "test Corp", "ParentCompanyAgentAuthority": "", "AuthorityE": "", "InvitationSessionDate": "", "TheCTerRegRequestClusterGroupList": [] }, "Result": { "Description": "send successful", "Successful": true, "Message": "423424", "No": "-1", "Code": "1000" } }, "CBIResponse": { "respCode": 0, "accessNo": "3694361110607356378" } } I designed like below image: below design is true? USE [NFC] GO /****** Object: Table [dbo].[tbl_NFCInquiryStructure] Script Date: 2021-09-04 09:42:32 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[tbl_NFCInquiryStructure]( [ID] [int] IDENTITY(1,1) NOT NULL, [NodeName] [nvarchar](500) NULL, [ParentId] [int] NULL, [IsValue] [bit] NULL ) ON [PRIMARY] GO It shows table design that I guess that's right. Contains the parent field. Is true? I want to implement this hierarchical file in a table. Help me please
How to sort a list of restaurant names by restaurant rating (possibly from Google Places or Yelp Fusion API)
I have a csv file with thousands of restaurant names and addresses that I need to sort by rating (data that is not in the csv). Is there a way to fill in the csv with this data? Possibly with Google Places API or Yelp Fusion API?
Both the Google Places API and Yelp Fusion API let you obtain a restaurant’s rating if you query with the business name and address. I’m going to explain how to do this but, first a caution about compliance. What you describe is clearly against the terms of service for both APIs. The only permitted use of their data is to display it on a publicly available website or app. Fetching and retaining it in a csv file is clearly improper. The APIs are intended for real-time query and immediate display of results for your users. Google requires that the Places data be displayed in conjunction with a Google map or an approved "powered by Google" image. Additionally, no "pre-fetching, caching, or storage of content" is permitted. For details see https://developers.google.com/places/web-service/policies Yelp requires attribution, basically requiring you to display the star rating and the Yelp logo with a link back to the business page on Yelp for the restaurant you have queried. See https://www.yelp.com/developers/display_requirements Furthermore, you can’t “cache, record, pre-fetch, or otherwise store any portion of the Yelp Content for a period longer than twenty-four (24) hours from receipt of the Yelp Content, or attempt or provide a means to execute any scraping or "bulk download" operations.” For full text and terms see https://www.yelp.com/developers/api_terms With the legalese out of the way, here’s how to request a restaurant’s rating from Google Places: https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=Applebees,234 W 42nd St,New York,NY&inputtype=textquery&fields=formatted_address,name,rating&key=YOUR_API_KEY And, the JSON response: { "candidates": [ { "formatted_address": "234 W 42nd St, New York, NY 10036, USA", "name": "Applebee's Grill + Bar", "rating": 3.6 } ], "status": "OK" } Here is the same request for Yelp Fusion. There is no way to request just the rating. Results always contain everything in their database for the restaurant: https://api.yelp.com/v3/businesses/search?term=applebees&location=234 W 42nd St,New York,NY&limit=1 JSON response: { "businesses": [ { "id": "gytFjzBw-z5LZD-6JSMChg", "alias": "applebees-grill-bar-new-york-3", "name": "Applebee's Grill + Bar", "image_url": "https://s3-media1.fl.yelpcdn.com/bphoto/CLizyj9S7pMvwGNm2dgdiQ/o.jpg", "is_closed": false, "url": "https://www.yelp.com/biz/applebees-grill-bar-new-york-3?adjust_creative=pnOv3Zj2REsNDMU4Z3-SLg&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=pnOv3Zj2REsNDMU4Z3-SLg", "review_count": 444, "categories": [ { "alias": "tradamerican", "title": "American (Traditional)" }, { "alias": "burgers", "title": "Burgers" }, { "alias": "sportsbars", "title": "Sports Bars" } ], "rating": 2, "coordinates": { "latitude": 40.756442, "longitude": -73.988838 }, "transactions": [ "delivery", "pickup" ], "price": "$$", "location": { "address1": "234 W 42nd St", "address2": "", "address3": "", "city": "New York", "zip_code": "10036", "country": "US", "state": "NY", "display_address": [ "234 W 42nd St", "New York, NY 10036" ] }, "phone": "+12123917414", "display_phone": "(212) 391-7414", "distance": 5.938732504864397 } ], "total": 2900, "region": { "center": { "longitude": -73.98880004882812, "latitude": 40.75648701137637 } } }
How to get API.AI simply send me the JSON data of the conversation?
I am trying to understand if there is an option to get the conversation logs of the discussions with some sort of a webhook. The API.AI docs only refer to using webhook for fulfilment purposes , but for now I don't plan my server (GCP ENGINE APP) to supply fulfilment but only to log the relevant parameters from each conversation. Anyone knows how to approach this?
Turn on the webhook feature for the intent. You will be able to get the requests and all the data associated with it. You will be able to send back to API.AI too. Here is the full circle: { "id": "891db09a-851c-43dc-81c6-4c6705c94f85", "timestamp": "2017-01-03T10:31:18.676Z", "result": { "source": "agent", "resolvedQuery": "yes, France", "action": "show.news", "actionIncomplete": false, "parameters": { "adjective": "", "subject": "France" }, "contexts": [ { "name": "subject", "parameters": { "subject.original": "France", "adjective": "", "subject": "France", "adjective.original": "" }, "lifespan": 5 }, { "name": "region", "parameters": { "subject.original": "France", "adjective": "", "subject": "France", "adjective.original": "" }, "lifespan": 5 } ], "metadata": { "intentId": "34773849-4ac2-4e28-95a5-7abfc061044e", "webhookUsed": "true", "webhookForSlotFillingUsed": "false", "intentName": "subject" }, "fulfillment": { "speech": "Here is the latest news\n\n According to Watson the main emotion expressed in the article is: ;( ( sadness )\n\n Son of Equatorial Guinea’s president facing trial in France\n\nPARIS — After years of investigation, France on Monday put the son of the president of Equatorial Guinea on trial for corruption, charged with spending many millions in state funds — much of it allegedly in cash — to feed an opulent lifestyle of fast cars, designer clothes, works of art and...\n\nRead more: https://www.washingtonpost.com/world/europe/son-of-equatorial-guineas-president-facing-trial-in-france/2017/01/02/b03d30d0-d0cb-11e6-9651-54a0154cf5b3_story.html", "source": "Washington Post", "displayText": "Here is the latest news. According to Watson the main emotion expressed in the article is: sadness", "messages": [ { "type": 0, "speech": "Here is the latest news\n\n According to Watson the main emotion expressed in the article is: ;( ( sadness )\n\n Son of Equatorial Guinea’s president facing trial in France\n\nPARIS — After years of investigation, France on Monday put the son of the president of Equatorial Guinea on trial for corruption, charged with spending many millions in state funds — much of it allegedly in cash — to feed an opulent lifestyle of fast cars, designer clothes, works of art and...\n\nRead more: https://www.washingtonpost.com/world/europe/son-of-equatorial-guineas-president-facing-trial-in-france/2017/01/02/b03d30d0-d0cb-11e6-9651-54a0154cf5b3_story.html" } ], "data": { "newsAgent": { "adjective": "", "subject": "France", "intent": "subject", "action": "show.news", "news": { "title": "Son of Equatorial Guinea’s president facing trial in France", "source": "Washington Post", "link": "https://www.washingtonpost.com/world/europe/son-of-equatorial-guineas-president-facing-trial-in-france/2017/01/02/b03d30d0-d0cb-11e6-9651-54a0154cf5b3_story.html", "language": "english", "body": "PARIS — After years of investigation, France on Monday put the son of the president of Equatorial Guinea on trial for corruption, charged with spending many millions in state funds — much of it allegedly in cash — to feed an opulent lifestyle of fast cars, designer clothes, works of art and...", "emotion": "sadness", "emoticon": ";(" }, "speech": "Here is the latest news", "sessionId": "0856125a-d0bc-4cba-990d-cbcfaea536db" } } }, "score": 1 }, "status": { "code": 206, "errorType": "partial_content", "errorDetails": "Webhook call failed. Error message: Webhook contains contexts with empty names or names containing whitespaces. ErrorId: 131000fa-0ec1-4efb-b47c-64301ac7bb2b" }, "sessionId": "0856125a-d0bc-4cba-990d-cbcfaea536db" } The result object is the request that API.AI sends you, you get the contexts objects as well. The fulfilment object is the response my endpoint sent back to API.AI Check the documentation
Google Feed API - not returning feed URLs
When I use the Google Feed API's find search, a lot of the time it's not returning the URLs of the feed. As an example, a find search for the query 'CNN', points to this URL: https://ajax.googleapis.com/ajax/services/feed/find?v=1.0&q=cnn And returns these results (trimmed): { "responseData": { "query": "cnn", "entries": [ { "url": "", "title": "<b>CNN</b>.com: Breaking News, US, World, Weather, Entertainment <b>...</b>", "contentSnippet": "Find the latest breaking news and information on the top stories, weather, <br>\nbusiness, entertainment, politics, and more. For in-depth coverage, <b>CNN</b> <br>\nprovides ...", "link": "http://www.cnn.com/" }, { "url": "", "title": "World News - International Headlines, Stories and Video - <b>CNN</b>.com", "contentSnippet": "<b>CNN</b> brings you International News stories, video and headlines from Europe, <br>\nAsia, Africa, the Middle East, and the Americas.", "link": "http://www.cnn.com/world" }, { "url": "", "title": "U.S. News - Headlines, Stories and Video - <b>CNN</b>.com", "contentSnippet": "<b>CNN</b>.com brings you US News, Videos and Stories from around the country.", "link": "http://www.cnn.com/us" }, { "url": "", "title": "<b>CNN</b> (#<b>CNN</b>) | Twitter", "contentSnippet": "The latest Tweets from <b>CNN</b> (#<b>CNN</b>). It's our job to #GoThere and tell the most <br>\ndifficult stories. Come with us!", "link": "https://twitter.com/cnn" }, { "url": "http://gdata.youtube.com/feeds/base/users/CNN/uploads?alt=rss&v=2&orderby=published&client=ytapi-youtube-profile", "title": "<b>CNN</b> - YouTube", "contentSnippet": "<b>CNN</b> operates as a division of Turner Broadcasting System, which is a subsidiary <br>\nof Time Warner. <b>CNN</b> identifies itself as -- and is widely known to be - the m...", "link": "http://www.youtube.com/user/CNN" } ] }, "responseDetails": null, "responseStatus": 200 } The first 4 results don't have a URL attached. The 5th one does, but isn't relevant, so my initial idea to remove items with empty URLs wouldn't work. Following the basic query example on their developer guide, their example shows the url field of the results filled in. Copy and pasting the URL they provided shows similar results, but without the url field filled out. Unless I'm mistaken, this seems like it must be a problem with Google's results.