דף 1 מתוך 6

מחלקה של תקשורת עם ימות API

נשלח: 19:08 07/01/2018
על ידי מאזין נלהב
לתועלת הציבור, מצורפת מחלקה שמתקשרת עם ימות בAPI בקלות.
(לצורך עבודה תקינה של המחלקה צורפו עוד כמה מחלקות עזר.)

לדוגמא:

קוד: בחירת הכל

/*================יצירת אובייקט(מופע) חדש====================*/

$con = new connecting_to_yemot_api('0773137770', '0000');

/*===============================================================*/


/*================קבלת מספר היחידות====================*/

$a = $con -> connecting('GetSession');

print_r($a);

/*===============================================================*/



/*================הפעלת קמפיין====================*/

$body = array
(
// מספר הקמפיין
'templateId' => '203584',
);

$a = $con -> connecting('RunCampaign', $body);

print_r($a);

/*===============================================================*/


/*================הורדת קובץ====================*/

$body = array
(
// נתיב הקובץ
'path' => 'ivr/ext.ini',
);

$a = $con -> connecting('DownloadFile', $body);

print_r($a);

/*===============================================================*/



/*================העלאת קובץ====================*/

// יצירת הקובץ
$File = new oFile('ext.ini', 'text/plain', 'type=menu');

$body = array
(
'path' => 'ivr/ext.ini',
'convertAudio' => 0,
'fileUpload' => $File
);

$a = $con -> connecting('UploadFile', $body);

print_r($a);

/*===============================================================*/
להלן המחלקה:

קוד: בחירת הכל

class BodyPost
{
// part "multipart/form-data"
public static function PartPost($name, $val)
{
$body = 'Content-Disposition: form-data; name="' . $name . '"';
// check instance of oFile
if($val instanceof oFile)
{
$file = $val->Name();
$mime = $val->Mime();
$cont = $val->Content();

$body .= '; filename="' . $file . '"' . "\r\n";
$body .= 'Content-Type: ' . $mime ."\r\n\r\n";
$body .= $cont."\r\n";
} else $body .= "\r\n\r\n".$val."\r\n";
return $body;
}

public static function Get(array $post, $delimiter = '-------------0123456789')
{
if(is_array($post) && !empty($post))
{
$bool = true;
//foreach($post as $val) if($val instanceof oFile) {$bool = true; break; };
if($bool)
{
$ret = '';
foreach($post as $name=>$val)
$ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val);
$ret .= "--" . $delimiter . "--\r\n";
} else $ret = http_build_query($post);
} else throw new \Exception('Error input param!');
return $ret;
}
}

class oFile
{
private $name;
private $mime;
private $content;

public function __construct($name, $mime=null, $content=null)
{
if(is_null($content))
{
$info = pathinfo($name);
// check is exist and readable file
if(!empty($info['basename']) && is_readable($name))
{
$this->name = $info['basename'];
// get MIME
$this->mime = mime_content_type($name);
// load file
$content = file_get_contents($name);
if($content!==false)
{
$this->content = $content;
}
else
{
throw new Exception('Don`t get content - "'.$name.'"');
}
}
else
{
throw new Exception('Error param');
}
}
else
{
$this->name = $name;
if(is_null($mime)) $mime = mime_content_type($name);
$this->mime = $mime;
$this->content = $content;
};
}

public function Name() { return $this->name; }

public function Mime() { return $this->mime; }

public function Content() { return $this->content; }

}

class connecting_to_yemot_api
{
public $token;

const URL = 'https://www.call2all.co.il/ym/api/';

public function __construct($user_name, $password)
{
$body = array('username' => $user_name, 'password' => $password);

$body = http_build_query($body);

$opts = array('http' => array(

'method' => 'POST',

'header' => "Content-Type: application/x-www-form-urlencoded",

'content' => $body,

'follow_location' => false) );

$context = stream_context_create($opts);

$url = self::URL.'Login';

$result = file_get_contents($url, FALSE, $context);

$result = json_decode($result);

if($result -> responseStatus == 'OK')
{
$this -> token = $result -> token;

return TRUE;
}
else
{
throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים');
}
}

public function __destruct()
{
$this -> connecting('Logout');
}

public function connecting($action, $body = array())
{
$delimiter = '----'.uniqid();

$body['token'] = $this -> token;

$body = BodyPost::Get($body, $delimiter);

$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-Type: multipart/form-data; boundary='.$delimiter,
'content' => $body,
'follow_location' => false
)
);
$context = stream_context_create($opts);

$url = self::URL.$action;

$result = file_get_contents($url, FALSE, $context);

$headers = $this -> parseHeaders($http_response_header);

if($headers['Content-Type'][0] == 'application/json')
{
return json_decode($result);
}
else
{
return $result;
}
}

private function parseHeaders($headers)
{
// פונקציה שמקבלת מערך של שורות הכותרות
// הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד


// מערך הכותרות
$head = array();

foreach( $headers as $k=>$v )
{
$t = explode( ':', $v, 2 );

if( isset( $t[1] ) )
{
if($t[0] == 'Set-Cookie')
{
$CookiesArr = array();

$cookies = explode( ';', $t[1]);

foreach($cookies as $cookie)
{
$c = explode( '=', $cookie);

if( isset( $c[1] ) )
{
$CookiesArr[ trim($c[0]) ] = trim( $c[1] );
}
else
{
$CookiesArr[] = trim( $c[0] );
}
}

$head[ trim($t[0]) ] = $CookiesArr;
}
elseif($t[0] == 'Content-Type')
{
$arr = array();

$children = explode( ';', $t[1]);

foreach($children as $child)
{
$c = explode( '=', $child);

if( isset( $c[1] ) )
{
$arr[ trim($c[0]) ] = trim( $c[1] );
}
else
{
$arr[] = trim( $c[0] );
}
}

$head[ trim($t[0]) ] = $arr;
}
else
{
$head[ trim($t[0]) ] = trim( $t[1] );
}
}
else
{
$head[] = $v;
if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
{
$head['reponse_code'] = intval($out[1]);
}
}
}
return $head;
}
}

Re: מחלקה של תקשורת עם ימות API

נשלח: 01:50 08/01/2018
על ידי רדיופון
תודה רבה! :)

Re: מחלקה של תקשורת עם ימות API

נשלח: 09:16 08/01/2018
על ידי טלפון
רק תסביר מה זה מחלקה? ולמה זה מיועד?

Re: מחלקה של תקשורת עם ימות API

נשלח: 15:52 24/01/2018
על ידי 011371
למה אתה משתמש עם
file_get_contents

ולא עם
Curl

יש בזה עדיפות?

Re: מחלקה של תקשורת עם ימות API

נשלח: 17:08 24/01/2018
על ידי מאזין נלהב
למה אתה משתמש עם
file_get_contents

ולא עם
Curl

יש בזה עדיפות?
כן, שCURL צריך להיות מותקן.
וfile_get_contents לא.

Re: מחלקה של תקשורת עם ימות API

נשלח: 17:44 24/01/2018
על ידי 011371
למה אתה משתמש עם
file_get_contents

ולא עם
Curl

יש בזה עדיפות?
כן, שCURL צריך להיות מותקן.
וfile_get_contents לא.
תודה זה בדיוק רציתי לדעת

Re: מחלקה של תקשורת עם ימות API

נשלח: 15:32 02/02/2018
על ידי מנחם מענדל מענדי
הגדרתי את זה בשרת אבל קורה משום מה הוא לא משתלב עם שורה מסויימת ונראה לי זה הpublic function. אשמח שתעזרו לי.תודה
20180202_153100.png
20180202_153100.png (126.22 KiB) נצפה 6310 פעמים
20180202_153437.png
20180202_153437.png (11.86 KiB) נצפה 6310 פעמים

Re: מחלקה של תקשורת עם ימות API

נשלח: 13:38 07/02/2018
על ידי 957
יפה מאד!
יש אפשרות לקבל את:
מספר המאזינים כעת
פירוט שיחות פעילות
פירוט שיחות
?

Re: מחלקה של תקשורת עם ימות API

נשלח: 15:41 07/02/2018
על ידי 011371
יפה מאד!
יש אפשרות לקבל את:
מספר המאזינים כעת
פירוט שיחות פעילות
פירוט שיחות
?
דרך ה yemot api זה לא קיים
מחכים שיפתחו
או שמישהו ידריך איך אפשר להתחבר לאתר אם אופציה של curl
(אולי אני לא יודע אבל יש דרך להשתמש ב file_get_contents כאשר צריך לשלוח חלק מהנתונים בPOST ?)
(לגבי פירוט שיחות גם באתר אין אפשר רק להזמין דוח למייל דרך הטלפון, אולי אחרי שנדע איך להתחבר לאתר תוכל דרך cron להריץ כל הזמן את הסקריפט ולאגור לבד את הנתונים… אין לי אחריות על המשאבים והתעבורה שזה יקח...)

Re: מחלקה של תקשורת עם ימות API

נשלח: 15:43 07/02/2018
על ידי BY6199
יפה מאד!
יש אפשרות לקבל את:
מספר המאזינים כעת
פירוט שיחות פעילות
פירוט שיחות
?
דרך ה yemot api זה לא קיים
מחכים שיפתחו
או שמישהו ידריך איך אפשר להתחבר לאתר אם אופציה של curl
(אולי אני לא יודע אבל יש דרך להשתמש ב file_get_contents כאשר צריך לשלוח חלק מהנתונים בPOST ?)
למיטב ידיעתי אפשרי, פירוט שיחות כללי (חודשי) לא.
שיחות פעילות ומספר המאזינים כן.