expedia.com

Summary

Expedia is a travel website offering vacation homes, hotels, car rentals, flights, and more. It provides options to bundle stays with car rentals or flights for savings and features various travel deals and promotions.

Associated Brands

IAB Categories

TravelShopping

IAB Ad Products

Travel and TourismTravel Agents and Online Travel ServicesTravel Packages

Tags

Screenshot of expedia.com

Creatives

IDDomainSeatBidTimestampStatusAd FormatSub FormatSizeQuality ScoreData TransferredComputational Cost
cm861i34231$0.903/12/2025, 2:53:47 PM
Domain Capture: Success
Ad Rendering: Success
Brand Mapping: Success
Ad Analysis: Pending
Domain Analysis: Pending
3/5 complete
banner-300x250N/A1259.11 KB14647.00 ms
cm861i34231$0.903/12/2025, 2:53:47 PM
Domain Capture: Success
Ad Rendering: Success
Brand Mapping: Success
Ad Analysis: Failed: PrismaClientKnownRequestError: Invalid `s.chat.completions.create()` invocation in /var/task/dist/index.js:178:3157 175 Return the structured classification JSON as per the format. 176 `}};function k(e,a){let n=e==="creative"?Z.SUMMARY_TEXT:ee.SUMMARY_TEXT,i=!a||a.trim()===""?"NONE":a.substring(0,5e3);return{SYSTEM:n.SYSTEM,USER:`${n.USER} 177 → 178 ${i}`}}var E=async(e,a,n,i,t,s)=>{try{let g=(await s.chat.completions.create( An operation failed because it depends on one or more records that were required but not found. Expected 2 records to be connected, found only 0.
Domain Analysis: Failed: PrismaClientKnownRequestError: Invalid `e.domain.findUnique()` invocation in /var/task/dist/index.js:180:1316 177 178 ${i}`}}var E=async(e,a,n,i,t,s)=>{try{let g=(await s.chat.completions.create({...b,messages:[{role:"system",content:e.SYSTEM},{role:"user",content:[{type:"text",text:e.USER(a,n,i,t)}]}],response_format:{type:"json_schema",json_schema:{name:"contentClassification",description:"A structured JSON object containing an array of classified categories with confidence scores.",strict:!0,schema:{type:"object",properties:{classifications:{type:"array",items:{type:"object",properties:{category:{type:"string",description:"The assigned IAB or sensitive content category."},confidence:{type:"number",description:"The confidence score of the classification (0.0 - 1.0)."}},required:["category","confidence"],additionalProperties:!1}}},required:["classifications"],additionalProperties:!1}}}})).choices[0].message.content;if(!g)return[];let c=JSON.parse(g);return!c||!c.classifications||!Array.isArray(c.classifications)?[]:c.classifications.every(u=>typeof u.category=="string"&&typeof u.confidence=="number")?c.classifications:[]}catch(l){return console.error("Error in classifyContent:",l),[]}};async function v({type:e,summary:a,textFromImage:n,adomain:i,openai:t}){let s=await E(C.IAB,e,a,n,i,t);return console.log("IAB Classification: ",s),s}async function A({type:e,summary:a,textFromImage:n,adomain:i,openai:t}){let s=await E(C.IAB_AD_PRODUCT,e,a,n,i,t);return console.log("IAB Ad Product Classification: ",s),s}async function I({type:e,summary:a,textFromImage:n,adomain:i,openai:t}){let s=await E(C.SENSITIVE,e,a,n,i,t);return console.log("Sensitive Classification: ",s),s}async function te(e){let n=await(await fetch(e)).text();return n||(console.error(`Error getting HTML for ${e}`),"")}async function P(e,a,n,i="creative"){console.log("getting text and summary for type: ",i);let t=await te(a),s=k(i,t);console.log("Prompts: ",s);let l=[{type:"text",text:s.USER},{type:"image_url",image_url:{url:e}}],c=(await n.chat.completions.create({...b,messages:[{role:"system",content:s.SYSTEM},{role:"user",content:l}],response_format:{type:"json_schema",json_schema:{name:"extractedTextAndSummary",description:"A structured JSON object with extracted text and summary.",strict:!0,schema:{type:"object",properties:{extractedText:{type:"array",items:{type:"string"},description:"An array of strings, each representing a text element extracted from the image."},summary:{type:["string","null"],description:"A brief summary of the image."}},required:["extractedText","summary"],additionalProperties:!1}}}})).choices[0].message.content;if(!c)return{extractedText:[],summary:""};try{let r=JSON.parse(c);return console.log("Summary and text response-: ",i,r),r}catch(r){return console.error("Error parsing JSON response:",r,c),{extractedText:[],summary:""}}}var w=require("@aws-sdk/client-s3"),x=require("@aws-sdk/s3-request-presigner");var G=async(e,a,n)=>{let i=await e.creative.findUnique({where:{id:a},include:{auditResult:!1}});if(!i)throw console.error("Creative not found",a),new Error("Creative not found");console.log("Creative: ",i);let t=await ne({data:{creative:i,adomain:i.adomain},s3:n});return console.log("Creative analysis result:",t),await e.creative.update({where:{id:i.id},data:{summary:t.summary,iabCategories:{connect:t.iabCategoriesCodes.map(s=>({code:s.category}))},iabProducts:{connect:t.iabAdProductIds.map(s=>({id:s.id}))},tags:{connect:t.foundSensitiveTags.map(s=>({name:s.category}))}}}),t};async function ne({data:e,s3:a}){console.log("Analyzing with OpenAI:",e.creative.id);let n="creative",i=new U.default({apiKey:process.env.OPENAI_API_KEY}),{summary:t,textFromImage:s}=await ae(e,i,a),l=await v({type:n,summary:t,textFromImage:s,adomain:e.adomain,openai:i}),g=await A({type:n,summary:t,textFromImage:s,adomain:e.adomain,openai:i}),c=await I({type:n,summary:t,textFromImage:s,adomain:e.adomain,openai:i}),r=[];for(let[o,m]of Object.entries(S)){let d=l.find(p=>m.includes(p.category));d&&r.push({category:o,confidence:d.confidence})}let u=[];for(let[o,m]of Object.entries(f)){let d=g.find(p=>m===p.category);d&&u.push({id:parseInt(o),confidence:d.confidence})}return{iabCategoriesCodes:r.filter(o=>o.confidence>=.7),iabAdProductIds:u.filter(o=>o.confidence>=.5),foundSensitiveTags:c,summary:t}}async function ae(e,a,n){console.log("Getting summary and text from creative image:",e.creative.id);let i=null,t=[],s=null;if(e.creative.ad_format==="native"){let r=null,u=JSON.parse(JSON.parse(e.creative.raw_json).adm);for(let o=0;o<u.native.assets.length;o++){let m=u.native.assets[o];if(m.data&&m.data.value&&t.push(m.data.value),m.img&&m.img.url){let d=m.img.w*m.img.h;(!r||d>r.resolution)&&(r={url:m.img.url,resolution:d})}}if(r)i=r.url;else throw new Error("No image found in native creative")}t.length>0&&(s=` 179 (Parsed text from native assets: ${t.join(` → 180 - `)})`),i||(console.log("Getting non-native creative image URL"),i=await ie(e,n));let l=await se(e,n);console.log("Img URL: ",i),console.log("Html URL: ",l);let{summary:g,textFromImage:c}=await P(i,l,a,"creative");return{summary:`${g}${s}`,textFromImage:c}}async function ie(e,a){let n=`ads/${e.creative.id}/screenshot_0.jpg`,i=new w.GetObjectCommand({Bucket:process.env.R2_BUCKET||"",Key:n});try{return await(0,x.getSignedUrl)(a,i,{expiresIn:3600})}catch(t){console.error("Error getting creative image URL:",t)}return`${process.env.CDN_URL}/ads/${e.creative.id}/screenshot_0.jpg?${Math.random().toString(36).substring(2,15)}`}var se=async(e,a)=>{let n=`ads/${e.creative.id}/index.html`,i=new w.GetObjectCommand({Bucket:process.env.R2_BUCKET||"",Key:n});return await(0,x.getSignedUrl)(a,i,{expiresIn:3600})};var N=B(require("openai"));var R=require("@aws-sdk/client-s3"),D=require("@aws-sdk/s3-request-presigner");var L=async(e,a,n,i)=>{let t=null;if(n?t=await e.domain.findUnique( An operation failed because it depends on one or more records that were required but not found. Expected 3 records to be connected, found only 0.
3/5 complete, 2 failed
banner-300x250N/A1304.20 KB13772.00 ms
cm861i34231$0.903/12/2025, 2:53:47 PM
Ad Analysis: Success
Domain Analysis: Success
Domain Capture: Success
Ad Rendering: Success
Brand Mapping: Success
5/5 complete
banner-728x906/10724.24 KB12700.00 ms