admarket

package
v1.3.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 22, 2024 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

Package admarket 包含ALIOS广告平台相关结构体

https://open.taobao.com/API.htm?docType=2&docId=37669

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ReleaseAd added in v1.3.4

func ReleaseAd(v *Ad)

ReleaseAd 释放Ad

func ReleaseAdSlot added in v1.3.4

func ReleaseAdSlot(v *AdSlot)

ReleaseAdSlot 释放AdSlot

func ReleaseAdSlots added in v1.3.4

func ReleaseAdSlots(v *AdSlots)

ReleaseAdSlots 释放AdSlots

func ReleaseAppInfo added in v1.3.4

func ReleaseAppInfo(v *AppInfo)

ReleaseAppInfo 释放AppInfo

func ReleaseBidRequest added in v1.3.4

func ReleaseBidRequest(v *BidRequest)

ReleaseBidRequest 释放BidRequest

func ReleaseBidResponse added in v1.3.4

func ReleaseBidResponse(v *BidResponse)

ReleaseBidResponse 释放BidResponse

func ReleaseDeviceInfo added in v1.3.4

func ReleaseDeviceInfo(v *DeviceInfo)

ReleaseDeviceInfo 释放DeviceInfo

func ReleaseExcludeDevice added in v1.3.4

func ReleaseExcludeDevice(v *ExcludeDevice)

ReleaseExcludeDevice 释放ExcludeDevice

func ReleaseLocation added in v1.3.4

func ReleaseLocation(v *Location)

ReleaseLocation 释放Location

func ReleaseMonitor added in v1.3.4

func ReleaseMonitor(v *Monitor)

ReleaseMonitor 释放Monitor

func ReleaseNetwork added in v1.3.4

func ReleaseNetwork(v *Network)

ReleaseNetwork 释放Network

func ReleaseSdkInfo added in v1.3.4

func ReleaseSdkInfo(v *SdkInfo)

ReleaseSdkInfo 释放SdkInfo

func ReleaseSspMaterialAuditResult added in v1.3.4

func ReleaseSspMaterialAuditResult(v *SspMaterialAuditResult)

ReleaseSspMaterialAuditResult 释放SspMaterialAuditResult

func ReleaseTarget added in v1.3.4

func ReleaseTarget(v *Target)

ReleaseTarget 释放Target

func ReleaseUdid added in v1.3.4

func ReleaseUdid(v *Udid)

ReleaseUdid 释放Udid

func ReleaseUserInfo added in v1.3.4

func ReleaseUserInfo(v *UserInfo)

ReleaseUserInfo 释放UserInfo

func ReleaseYunosAdmarketAdBidAPIRequest added in v1.3.4

func ReleaseYunosAdmarketAdBidAPIRequest(v *YunosAdmarketAdBidAPIRequest)

ReleaseYunosAdmarketAdBidAPIRequest 将 YunosAdmarketAdBidAPIRequest 放入 sync.Pool

func ReleaseYunosAdmarketAdBidAPIResponse added in v1.3.4

func ReleaseYunosAdmarketAdBidAPIResponse(v *YunosAdmarketAdBidAPIResponse)

ReleaseYunosAdmarketAdBidAPIResponse 将 YunosAdmarketAdBidAPIResponse 保存到 sync.Pool

func ReleaseYunosAdmarketMaterialAuditAPIRequest added in v1.3.4

func ReleaseYunosAdmarketMaterialAuditAPIRequest(v *YunosAdmarketMaterialAuditAPIRequest)

ReleaseYunosAdmarketMaterialAuditAPIRequest 将 YunosAdmarketMaterialAuditAPIRequest 放入 sync.Pool

func ReleaseYunosAdmarketMaterialAuditAPIResponse added in v1.3.4

func ReleaseYunosAdmarketMaterialAuditAPIResponse(v *YunosAdmarketMaterialAuditAPIResponse)

ReleaseYunosAdmarketMaterialAuditAPIResponse 将 YunosAdmarketMaterialAuditAPIResponse 保存到 sync.Pool

func ReleaseYunosAdmarketMaterialAuditResult added in v1.3.4

func ReleaseYunosAdmarketMaterialAuditResult(v *YunosAdmarketMaterialAuditResult)

ReleaseYunosAdmarketMaterialAuditResult 释放YunosAdmarketMaterialAuditResult

Types

type Ad struct {
	// 广告模板id
	TemplateId string `json:"template_id,omitempty" xml:"template_id,omitempty"`
	// 物料
	Adm string `json:"adm,omitempty" xml:"adm,omitempty"`
	// 价格
	Price int64 `json:"price,omitempty" xml:"price,omitempty"`
	// 广告目标对象
	Target *Target `json:"target,omitempty" xml:"target,omitempty"`
	// 监控对象
	Monitor *Monitor `json:"monitor,omitempty" xml:"monitor,omitempty"`
}

Ad 结构体

func GetAd added in v1.3.4

func GetAd() *Ad

GetAd() 从对象池中获取Ad

type AdSlot

type AdSlot struct {
	// 广告位id
	AdSlotId string `json:"ad_slot_id,omitempty" xml:"ad_slot_id,omitempty"`
	// 查询条件
	Query string `json:"query,omitempty" xml:"query,omitempty"`
	// 个数
	Count int64 `json:"count,omitempty" xml:"count,omitempty"`
}

AdSlot 结构体

func GetAdSlot added in v1.3.4

func GetAdSlot() *AdSlot

GetAdSlot() 从对象池中获取AdSlot

type AdSlots

type AdSlots struct {
	// 广告集合
	Ads []Ad `json:"ads,omitempty" xml:"ads>ad,omitempty"`
	// 广告位id
	AdSlotId string `json:"ad_slot_id,omitempty" xml:"ad_slot_id,omitempty"`
}

AdSlots 结构体

func GetAdSlots added in v1.3.4

func GetAdSlots() *AdSlots

GetAdSlots() 从对象池中获取AdSlots

type AppInfo

type AppInfo struct {
	// ssp的app名称
	AppName string `json:"app_name,omitempty" xml:"app_name,omitempty"`
	// ssp的app包名
	Pkg string `json:"pkg,omitempty" xml:"pkg,omitempty"`
	// app版本名
	VersionName string `json:"version_name,omitempty" xml:"version_name,omitempty"`
	// app版本号
	VersionCode int64 `json:"version_code,omitempty" xml:"version_code,omitempty"`
}

AppInfo 结构体

func GetAppInfo added in v1.3.4

func GetAppInfo() *AppInfo

GetAppInfo() 从对象池中获取AppInfo

type BidRequest

type BidRequest struct {
	// 广告位列表
	AdSlots []AdSlot `json:"ad_slots,omitempty" xml:"ad_slots>ad_slot,omitempty"`
	// 渠道id
	Channel string `json:"channel,omitempty" xml:"channel,omitempty"`
	// 版本号
	Version string `json:"version,omitempty" xml:"version,omitempty"`
	// 批次id
	BatchId string `json:"batch_id,omitempty" xml:"batch_id,omitempty"`
	// 应用信息
	AppInfo *AppInfo `json:"app_info,omitempty" xml:"app_info,omitempty"`
	// sdk信息
	SdkInfo *SdkInfo `json:"sdk_info,omitempty" xml:"sdk_info,omitempty"`
	// 设备信息
	DeviceInfo *DeviceInfo `json:"device_info,omitempty" xml:"device_info,omitempty"`
	// 设备id
	Udid *Udid `json:"udid,omitempty" xml:"udid,omitempty"`
	// 用户信息
	UserInfo *UserInfo `json:"user_info,omitempty" xml:"user_info,omitempty"`
	// 网络信息
	Network *Network `json:"network,omitempty" xml:"network,omitempty"`
	// 定位信息
	Location *Location `json:"location,omitempty" xml:"location,omitempty"`
}

BidRequest 结构体

func GetBidRequest added in v1.3.4

func GetBidRequest() *BidRequest

GetBidRequest() 从对象池中获取BidRequest

type BidResponse

type BidResponse struct {
	// 广告位列表
	AdSlots []AdSlots `json:"ad_slots,omitempty" xml:"ad_slots>ad_slots,omitempty"`
}

BidResponse 结构体

func GetBidResponse added in v1.3.4

func GetBidResponse() *BidResponse

GetBidResponse() 从对象池中获取BidResponse

type DeviceInfo

type DeviceInfo struct {
	// 机型
	Model string `json:"model,omitempty" xml:"model,omitempty"`
	// 操作系统版本
	OsVersion string `json:"os_version,omitempty" xml:"os_version,omitempty"`
	// 设备类型(OFFLINE_MACHINE/PHONE等)
	DeviceType string `json:"device_type,omitempty" xml:"device_type,omitempty"`
	// 厂商名称
	Vendor string `json:"vendor,omitempty" xml:"vendor,omitempty"`
	// 操作系统类型(ANDROID/ALIOS/WINDOWS/IOS)
	OsType string `json:"os_type,omitempty" xml:"os_type,omitempty"`
	// 客户端类型(MULTIPORT_SDK/PHONE_SDK)
	ClientType string `json:"client_type,omitempty" xml:"client_type,omitempty"`
	// 屏幕类型(VENDING_MACHINE)
	ScreenType string `json:"screen_type,omitempty" xml:"screen_type,omitempty"`
	// 屏幕分辨率宽度
	ScreenWidth int64 `json:"screen_width,omitempty" xml:"screen_width,omitempty"`
	// 分辨率高
	ScreenHeight int64 `json:"screen_height,omitempty" xml:"screen_height,omitempty"`
}

DeviceInfo 结构体

func GetDeviceInfo added in v1.3.4

func GetDeviceInfo() *DeviceInfo

GetDeviceInfo() 从对象池中获取DeviceInfo

type ExcludeDevice

type ExcludeDevice struct {
	// 排他设备id
	DeviceIds []string `json:"device_ids,omitempty" xml:"device_ids>string,omitempty"`
	// 排他开始时间
	StartTime string `json:"start_time,omitempty" xml:"start_time,omitempty"`
	// 排他结束时间
	EndTime string `json:"end_time,omitempty" xml:"end_time,omitempty"`
}

ExcludeDevice 结构体

func GetExcludeDevice added in v1.3.4

func GetExcludeDevice() *ExcludeDevice

GetExcludeDevice() 从对象池中获取ExcludeDevice

type Location

type Location struct {
	// 定位类型(WGS84/GCJ02/BD09)
	CoordinateType string `json:"coordinate_type,omitempty" xml:"coordinate_type,omitempty"`
	// 经度
	Longitude string `json:"longitude,omitempty" xml:"longitude,omitempty"`
	// 纬度
	Latitude string `json:"latitude,omitempty" xml:"latitude,omitempty"`
}

Location 结构体

func GetLocation added in v1.3.4

func GetLocation() *Location

GetLocation() 从对象池中获取Location

type Monitor

type Monitor struct {
	// 曝光地址
	ViewUrlList []string `json:"view_url_list,omitempty" xml:"view_url_list>string,omitempty"`
	// 结束播放地址
	EndPlayUrlList []string `json:"end_play_url_list,omitempty" xml:"end_play_url_list>string,omitempty"`
	// 开始播放地址
	StartPlayUrlList []string `json:"start_play_url_list,omitempty" xml:"start_play_url_list>string,omitempty"`
	// 点击地址
	ClickUrlList []string `json:"click_url_list,omitempty" xml:"click_url_list>string,omitempty"`
	// 事件上报地址
	EventUrlList []string `json:"event_url_list,omitempty" xml:"event_url_list>string,omitempty"`
}

Monitor 结构体

func GetMonitor added in v1.3.4

func GetMonitor() *Monitor

GetMonitor() 从对象池中获取Monitor

type Network

type Network struct {
	// 基站id
	CellularId string `json:"cellular_id,omitempty" xml:"cellular_id,omitempty"`
	// 运营商(UNKNOWN_OPERATOR/CHINA_MOBILE/CHINA_TELECOM/CHINA_UNICOM/OTHER_OPERATOR)
	OperatorType string `json:"operator_type,omitempty" xml:"operator_type,omitempty"`
	// 网络类型(CONNECTION_UNKNOWN/CELL_UNKNOWN/CELL_2G/CELL_3G/CELL_4G/CELL_5G/WIFI/ETHERNET/NEW_TYPE)
	ConnectionType string `json:"connection_type,omitempty" xml:"connection_type,omitempty"`
	// ip地址
	Ip string `json:"ip,omitempty" xml:"ip,omitempty"`
}

Network 结构体

func GetNetwork added in v1.3.4

func GetNetwork() *Network

GetNetwork() 从对象池中获取Network

type SdkInfo

type SdkInfo struct {
	// sdk版本名
	VersionName string `json:"version_name,omitempty" xml:"version_name,omitempty"`
	// sdk版本号
	VersionCode int64 `json:"version_code,omitempty" xml:"version_code,omitempty"`
}

SdkInfo 结构体

func GetSdkInfo added in v1.3.4

func GetSdkInfo() *SdkInfo

GetSdkInfo() 从对象池中获取SdkInfo

type SspMaterialAuditResult

type SspMaterialAuditResult struct {
	// 排除设备
	ExcludeDevices []ExcludeDevice `json:"exclude_devices,omitempty" xml:"exclude_devices>exclude_device,omitempty"`
	// 原因
	Reason string `json:"reason,omitempty" xml:"reason,omitempty"`
	// 审核结果
	Status string `json:"status,omitempty" xml:"status,omitempty"`
	// 渠道
	Channel string `json:"channel,omitempty" xml:"channel,omitempty"`
	// 创意id
	MaterialId int64 `json:"material_id,omitempty" xml:"material_id,omitempty"`
}

SspMaterialAuditResult 结构体

func GetSspMaterialAuditResult added in v1.3.4

func GetSspMaterialAuditResult() *SspMaterialAuditResult

GetSspMaterialAuditResult() 从对象池中获取SspMaterialAuditResult

type Target

type Target struct {
	// 广告目标类型
	TargetType string `json:"target_type,omitempty" xml:"target_type,omitempty"`
	// 广告目标值
	TargetValue string `json:"target_value,omitempty" xml:"target_value,omitempty"`
}

Target 结构体

func GetTarget added in v1.3.4

func GetTarget() *Target

GetTarget() 从对象池中获取Target

type Udid

type Udid struct {
	// imei
	Imei string `json:"imei,omitempty" xml:"imei,omitempty"`
	// mac
	Mac string `json:"mac,omitempty" xml:"mac,omitempty"`
	// andorid设备id
	AndroidId string `json:"android_id,omitempty" xml:"android_id,omitempty"`
	// umidToken
	UmidToken string `json:"umid_token,omitempty" xml:"umid_token,omitempty"`
	// uuid
	Uuid string `json:"uuid,omitempty" xml:"uuid,omitempty"`
	// 设备序列号
	SerialNum string `json:"serial_num,omitempty" xml:"serial_num,omitempty"`
	// sim序列号
	SimSn string `json:"sim_sn,omitempty" xml:"sim_sn,omitempty"`
	// 设备序列号
	Imsi string `json:"imsi,omitempty" xml:"imsi,omitempty"`
	// utdid
	Utdid string `json:"utdid,omitempty" xml:"utdid,omitempty"`
	// 设备id
	DeviceId string `json:"device_id,omitempty" xml:"device_id,omitempty"`
}

Udid 结构体

func GetUdid added in v1.3.4

func GetUdid() *Udid

GetUdid() 从对象池中获取Udid

type UserInfo

type UserInfo struct {
	// 用户id
	Id string `json:"id,omitempty" xml:"id,omitempty"`
	// 补充信息
	Info string `json:"info,omitempty" xml:"info,omitempty"`
}

UserInfo 结构体

func GetUserInfo added in v1.3.4

func GetUserInfo() *UserInfo

GetUserInfo() 从对象池中获取UserInfo

type YunosAdmarketAdBidAPIRequest added in v1.2.0

type YunosAdmarketAdBidAPIRequest struct {
	model.Params
	// contains filtered or unexported fields
}

YunosAdmarketAdBidAPIRequest 广告竞价服务 API请求 yunos.admarket.ad.bid

广告竞价服务

func GetYunosAdmarketAdBidAPIRequest added in v1.3.4

func GetYunosAdmarketAdBidAPIRequest() *YunosAdmarketAdBidAPIRequest

GetYunosAdmarketAdBidRequest 从 sync.Pool 获取 YunosAdmarketAdBidAPIRequest

func NewYunosAdmarketAdBidRequest

func NewYunosAdmarketAdBidRequest() *YunosAdmarketAdBidAPIRequest

NewYunosAdmarketAdBidRequest 初始化YunosAdmarketAdBidAPIRequest对象

func (YunosAdmarketAdBidAPIRequest) GetApiMethodName added in v1.2.0

func (r YunosAdmarketAdBidAPIRequest) GetApiMethodName() string

GetApiMethodName IRequest interface 方法, 获取Api method

func (YunosAdmarketAdBidAPIRequest) GetApiParams added in v1.2.0

func (r YunosAdmarketAdBidAPIRequest) GetApiParams(params url.Values)

GetApiParams IRequest interface 方法, 获取API参数

func (YunosAdmarketAdBidAPIRequest) GetBidRequest added in v1.2.0

func (r YunosAdmarketAdBidAPIRequest) GetBidRequest() *BidRequest

GetBidRequest BidRequest Getter

func (YunosAdmarketAdBidAPIRequest) GetRawParams added in v1.2.8

func (r YunosAdmarketAdBidAPIRequest) GetRawParams() model.Params

GetRawParams IRequest interface 方法, 获取API原始参数

func (*YunosAdmarketAdBidAPIRequest) Reset added in v1.3.4

func (r *YunosAdmarketAdBidAPIRequest) Reset()

Reset IRequest interface 方法, 清空结构体

func (*YunosAdmarketAdBidAPIRequest) SetBidRequest added in v1.2.0

func (r *YunosAdmarketAdBidAPIRequest) SetBidRequest(_bidRequest *BidRequest) error

SetBidRequest is BidRequest Setter 竞价请求

type YunosAdmarketAdBidAPIResponse

type YunosAdmarketAdBidAPIResponse struct {
	model.CommonResponse
	YunosAdmarketAdBidAPIResponseModel
}

YunosAdmarketAdBidAPIResponse 广告竞价服务 API返回值 yunos.admarket.ad.bid

广告竞价服务

func GetYunosAdmarketAdBidAPIResponse added in v1.3.4

func GetYunosAdmarketAdBidAPIResponse() *YunosAdmarketAdBidAPIResponse

GetYunosAdmarketAdBidAPIResponse 从 sync.Pool 获取 YunosAdmarketAdBidAPIResponse

func (*YunosAdmarketAdBidAPIResponse) Reset added in v1.3.4

func (m *YunosAdmarketAdBidAPIResponse) Reset()

Reset 清空结构体

type YunosAdmarketAdBidAPIResponseModel added in v1.2.0

type YunosAdmarketAdBidAPIResponseModel struct {
	XMLName xml.Name `xml:"yunos_admarket_ad_bid_response"`
	// 平台颁发的每次请求访问的唯一标识
	RequestId string `json:"request_id,omitempty" xml:"request_id,omitempty"`
	// 请求id
	Id string `json:"id,omitempty" xml:"id,omitempty"`
	// 返回结果描述
	ResultMsg string `json:"result_msg,omitempty" xml:"result_msg,omitempty"`
	// 响应码
	ResultCode string `json:"result_code,omitempty" xml:"result_code,omitempty"`
	// 返回结果
	Result *BidResponse `json:"result,omitempty" xml:"result,omitempty"`
	// 是否操作成功
	IsSuccess bool `json:"is_success,omitempty" xml:"is_success,omitempty"`
}

YunosAdmarketAdBidAPIResponseModel is 广告竞价服务 成功返回结果

func (*YunosAdmarketAdBidAPIResponseModel) Reset added in v1.3.4

Reset 清空结构体

type YunosAdmarketMaterialAuditAPIRequest added in v1.2.0

type YunosAdmarketMaterialAuditAPIRequest struct {
	model.Params
	// contains filtered or unexported fields
}

YunosAdmarketMaterialAuditAPIRequest 广告平台创意审核 API请求 yunos.admarket.material.audit

用于厂商上报广告平台审核结果

func GetYunosAdmarketMaterialAuditAPIRequest added in v1.3.4

func GetYunosAdmarketMaterialAuditAPIRequest() *YunosAdmarketMaterialAuditAPIRequest

GetYunosAdmarketMaterialAuditRequest 从 sync.Pool 获取 YunosAdmarketMaterialAuditAPIRequest

func NewYunosAdmarketMaterialAuditRequest

func NewYunosAdmarketMaterialAuditRequest() *YunosAdmarketMaterialAuditAPIRequest

NewYunosAdmarketMaterialAuditRequest 初始化YunosAdmarketMaterialAuditAPIRequest对象

func (YunosAdmarketMaterialAuditAPIRequest) GetApiMethodName added in v1.2.0

func (r YunosAdmarketMaterialAuditAPIRequest) GetApiMethodName() string

GetApiMethodName IRequest interface 方法, 获取Api method

func (YunosAdmarketMaterialAuditAPIRequest) GetApiParams added in v1.2.0

func (r YunosAdmarketMaterialAuditAPIRequest) GetApiParams(params url.Values)

GetApiParams IRequest interface 方法, 获取API参数

func (YunosAdmarketMaterialAuditAPIRequest) GetRawParams added in v1.2.8

GetRawParams IRequest interface 方法, 获取API原始参数

func (YunosAdmarketMaterialAuditAPIRequest) GetSspMaterialAuditResult added in v1.2.0

func (r YunosAdmarketMaterialAuditAPIRequest) GetSspMaterialAuditResult() *SspMaterialAuditResult

GetSspMaterialAuditResult SspMaterialAuditResult Getter

func (*YunosAdmarketMaterialAuditAPIRequest) Reset added in v1.3.4

Reset IRequest interface 方法, 清空结构体

func (*YunosAdmarketMaterialAuditAPIRequest) SetSspMaterialAuditResult added in v1.2.0

func (r *YunosAdmarketMaterialAuditAPIRequest) SetSspMaterialAuditResult(_sspMaterialAuditResult *SspMaterialAuditResult) error

SetSspMaterialAuditResult is SspMaterialAuditResult Setter 创意审核结果

type YunosAdmarketMaterialAuditAPIResponse

type YunosAdmarketMaterialAuditAPIResponse struct {
	model.CommonResponse
	YunosAdmarketMaterialAuditAPIResponseModel
}

YunosAdmarketMaterialAuditAPIResponse 广告平台创意审核 API返回值 yunos.admarket.material.audit

用于厂商上报广告平台审核结果

func GetYunosAdmarketMaterialAuditAPIResponse added in v1.3.4

func GetYunosAdmarketMaterialAuditAPIResponse() *YunosAdmarketMaterialAuditAPIResponse

GetYunosAdmarketMaterialAuditAPIResponse 从 sync.Pool 获取 YunosAdmarketMaterialAuditAPIResponse

func (*YunosAdmarketMaterialAuditAPIResponse) Reset added in v1.3.4

Reset 清空结构体

type YunosAdmarketMaterialAuditAPIResponseModel added in v1.2.0

type YunosAdmarketMaterialAuditAPIResponseModel struct {
	XMLName xml.Name `xml:"yunos_admarket_material_audit_response"`
	// 平台颁发的每次请求访问的唯一标识
	RequestId string `json:"request_id,omitempty" xml:"request_id,omitempty"`
	// 结果
	Result *YunosAdmarketMaterialAuditResult `json:"result,omitempty" xml:"result,omitempty"`
}

YunosAdmarketMaterialAuditAPIResponseModel is 广告平台创意审核 成功返回结果

func (*YunosAdmarketMaterialAuditAPIResponseModel) Reset added in v1.3.4

Reset 清空结构体

type YunosAdmarketMaterialAuditResult

type YunosAdmarketMaterialAuditResult struct {
	// 返回信息
	ResultMsg string `json:"result_msg,omitempty" xml:"result_msg,omitempty"`
	// 结果
	Result string `json:"result,omitempty" xml:"result,omitempty"`
	// 返回状态码
	ResultCode string `json:"result_code,omitempty" xml:"result_code,omitempty"`
	// 是否成功
	IsSuccess bool `json:"is_success,omitempty" xml:"is_success,omitempty"`
}

YunosAdmarketMaterialAuditResult 结构体

func GetYunosAdmarketMaterialAuditResult added in v1.3.4

func GetYunosAdmarketMaterialAuditResult() *YunosAdmarketMaterialAuditResult

GetYunosAdmarketMaterialAuditResult() 从对象池中获取YunosAdmarketMaterialAuditResult

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL